gpt4 book ai didi

令人困惑的 C 代码,有人为我解释一下吗?

转载 作者:太空狗 更新时间:2023-10-29 15:42:40 24 4
gpt4 key购买 nike

评估顺序确实很重要,所以,这就是所谓的非引用透明吗?

int i = 1;
int counter(){
i = i + 1;
return i;
}
int foo(int i, int j){
return i*2 + 3*j;
}
int main(){
printf("%d", foo(counter(), counter()));
}

最佳答案

我猜你可能想到的是函数参数的求值顺序在 C 中没有标准化。因为 counter() 会在每个函数上返回不同的结果调用,foo(2, 3) 的结果与 foo(3, 2) 的结果不同,编译和执行这段代码可能会得到不同的结果在不同的平台上

然而,在同一个平台上,它是确定性的,正如其他人已经很好地解释的那样。 [更新](准确地说:一旦在具有特定编译器选项的特定平台上编译成可执行文件,所有执行将产生相同的输出。但是,正如评论者指出的那样,它可能 甚至在使用不同的编译选项构建时在同一平台上产生不同的输出。)[/Update]

关于令人困惑的 C 代码,有人为我解释一下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com