参数按名称传递的函数的结果

时间:2017-06-10 17:44:46

标签: parameter-passing

考虑以下伪代码片段:

int c = 2;
int bar(int a)
{
    c = c + 2;
    return a * 2;
}


int foo(void)
{
    return(bar(c + 1));
}

我要求确定foo()的返回值是什么;假设使用的语言按名称传递所有参数。

我的理由是,由于参数是按名称传递的,因此c+1在调用bar(c+1)时不会被评估,但只有在形式参数{{1}的第一个实例时才会被评估a中遇到bar行,return a*2修改全局变量bar之后,因为c必须进行评估在呼叫者的环境中,即c+1的环境中,foo在其范围内只有全局foo,它将被评估为c },给出一个很好的返回值4+1

我怀疑这是否应该是10,如果我盲目地应用语法替换规则,因为通过名称要求第五行应该被解释为6,而不是return c+1*2那么这里的正确方法是什么?

供参考我使用Gabbrielli和Martini编程语言:原则和范例7.1.2节中提供的名字传递定义

0 个答案:

没有答案