【发布时间】:2021-02-04 16:08:40
【问题描述】:
谁能解释为什么这个程序打印 4 1 而不是 4 2?
不应该先执行具有较高优先级的预递增运算符并打印 4 2 吗?
#include <stdio.h>
int main() {
int a=1;
printf ("%ld %d",sizeof(++a),a);
return 0;
}
【问题讨论】:
-
未指定计算参数的顺序,这是UB
-
即使
sizeof(++a)本身也很奇特。 wiki.sei.cmu.edu/confluence/display/c/… -
@WilliamPursell 你确定是骗子吗?使用
sizeof(a++),从不评估a++,因此他的代码等同于printf ("%ld %d",sizeof(a),a);,这是完全合法的,这里不涉及UB。
标签: c sizeof operator-precedence