在阅读了关于未定义行为和序列点的 这个答案之后,我写了一个小程序:
#include <stdio.h>
int main(void) {
int i = 5;
i = (i, ++i, 1) + 1;
printf("%d\n", i);
return 0;
}
输出是 2
。哦,上帝,我没有看到递减来了! 这里发生了什么?
另外,在编译上述代码时,我收到一个警告:
C: 5:8: 警告: 逗号表达式的左操作数没有效果
[-Wunused-value] i = (i, ++i, 1) + 1; ^
为什么? 但是可能我的第一个问题的答案会自动给出答案。