【发布时间】:2015-08-17 07:50:27
【问题描述】:
在阅读this answer关于未定义行为和序列点之后,我写了一个小程序:
#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; ^
为什么?但可能我的第一个问题的答案会自动回答。
【问题讨论】:
-
别做怪事,你会没有朋友的:(
-
警告信息是您第一个问题的答案。
-
@gsamaras:不。结果 value 被丢弃,而不是修改。真正的答案:逗号运算符创建一个序列点。
-
@gsamaras 你不应该关心当你有积极的分数,甚至超过 10 个问题。
-
注意:优化编译器可能很简单
printf("2\n");
标签: c operators expression compiler-warnings comma-operator