gpt4 book ai didi

包含函数调用和后增量的表达式中的 C 序列点

转载 作者:行者123 更新时间:2023-12-04 11:06:09 24 4
gpt4 key购买 nike

下面的代码打印了什么?

#include <stdio.h>


int f(int x) { printf("%d", x); return 1; }

int main() {
int i = 0;
f(i++) && f(i++);
}

保证是 01 ,或者是 00在语句之后发生两个后增量?

最佳答案

根据 C99 和 C11,两者中的附录 C,在对函数的调用处有一个序列点,在所有参数都被求值之后和 && 的第一个操作数的末尾。运算符(operator)。
所以你受到双重保护,或者,正如我们在澳大利亚所说,如果鲨鱼没有捕获你,鳄鱼会(a)。
标准的两次迭代之间的措辞略有不同,但它们具有相同的效果。 C11 是(为了可读性稍微改写):

C11:

The following are the sequence points described earlier:

  • Between the evaluations of the function designator and actual arguments in a function call and the actual call.
  • Between the evaluations of the first and second operands of the following operators: '&&' '||' '?' ','.
&&的短路性质也意味着将首先评估表达式的左侧。
所以你的代码段定义得很好,输出将是 01 .

(a) 实际上,我认为澳大利亚没有人会这么说,除了史蒂夫·欧文(Steve Irwin),他既没有被鲨鱼也没有被鳄鱼咬过,并且可能会欣赏这样的讽刺。

关于包含函数调用和后增量的表达式中的 C 序列点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28229124/

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