#include <stdio.h>
int main(void)
{
int i = 0;
i = i++ + ++i;
printf("%d\n", i); // 3
i = 1;
i = (i++);
printf("%d\n", i); // 2 Should be 1, no ?
volatile int u = 0;
u = u++ + ++u;
printf("%d\n", u); // 1
u = 1;
u = (u++);
printf("%d\n", u); // 2 Should also be one, no ?
register int v = 0;
v = v++ + ++v;
printf("%d\n", v); // 3 (Should be the …Run Code Online (Sandbox Code Playgroud) c increment operator-precedence undefined-behavior sequence-points
这个问题在模拟面试中被问到了......真的很惊讶地找到了尴尬的答案......
考虑一个宏:
#define SQR(x) (x*x)
Run Code Online (Sandbox Code Playgroud)
例1:
SQR(2) //prints 4
Run Code Online (Sandbox Code Playgroud)
例2:
如果给出SQR(1 + 1),它不会求和(1+1),2而是......
SQR(1+1) //prints 3
Run Code Online (Sandbox Code Playgroud)
尴尬吧?是什么原因?这段代码是如何工作的?
注意:我搜索了SO,但找不到任何相关问题.如果有任何好评请分享!