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