gpt4 book ai didi

c - 是 i=f();当 f 修改 i 时定义?

转载 作者:太空狗 更新时间:2023-10-29 16:27:08 25 4
gpt4 key购买 nike

相关问题:Any good reason why assignment operator isn't a sequence point?

来自comp.lang.c FAQ我会推断下面的程序是未定义的。奇怪的是,它只提到调用 f 作为一个序列点,介于计算参数和将控制权转移到 f 之间。控制从 f 返回到调用表达式的转移未列为序列点。

int f(void) { i++; return 42; }
i = f();

真的没有定义吗?

作为我添加到我的许多问题的尾注,我对静态分析的上下文中的这个很感兴趣。我不是自己写的,我只是想知道我是否应该在别人写的程序中警告它。

最佳答案

The transfer of control from f back to the calling expression is not listed as a sequence point.

是的。

at the end of the evaluation of a full expression

The complete expression that forms an expression statement, or one of the controlling expressions of an if, switch, while, for, or do/while statement, or the expression in an initializer or a return statement.

你有一个返回语句,因此,你有一个序列点。

似乎没有

int f(void) { return i++; } // sequence point here, so I guess we're good
i = f();

未定义。 (这对我来说有点奇怪。)

关于c - 是 i=f();当 f 修改 i 时定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6055102/

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