copy-in-copy-out参数(值 - 结果参数传递)

时间:2012-04-24 01:36:49

标签: parameter-passing ada

如果参数传递机制是copy-in-copy-out,那么下面的C-like程序的结果是什么,就像在Ada中一样? 在执行swap(v, list[v])期间,v将更新为3.复制时,第二个参数的结果是否会复制到list[3]list[1]

swap(int x, int y){
    int t = x;
    x = y;
    y = t;
}

main(){
    v = 1;
    int list[5] = {1,3,5,7,9};
    swap(v, list[v]);
    print v, list[0...4];
}

2 个答案:

答案 0 :(得分:3)

Ada的参数传递机制是 copy-in-copy out 。 Ada不像C,其中mechanisim是显式的,编译器将遵循它,即使它是愚蠢的。

在某些特定情况下,语言指定通过引用传递内容。否则,它实际上取决于编译器,并且不允许您依赖于使用的一种机制而不是另一种机制。在实践中,编译器将执行合理的事情,如果对象适合机器寄存器,通常可以归结为复制,否则引用。

您列出的C代码的Ada版本中发生的情况取决于您将其转换为Ada的确切方式。我怀疑你会发现当你这样做会导致在C中引起潜在惊人行为的事情,Ada编译器或者不会让你这么做,或者它会迫使你以不再看起来的方式记录奇怪的。

答案 1 :(得分:0)

参数在执行调用之前被绑定,因此x绑定到v,y绑定到list [1]。