然后解释下你这个程序的实现:
#include <stdio.h>
int n;
inline void print(int x){
printf("Now n = %d, x = %d.", n, x);
}
int main(void){
n = 0;
print(n++);
return 0;
}
由于使用了内联函数,所以该程序可以看成是酱紫:#include <stdio.h>
int n;
inline void print(int x){
printf("Now n = %d, x = %d.", n, x);
}
int main(void){
n = 0;
printf("Now n = %d, x = %d.", n, n++);
return 0;
}
调用 printf() 函数的时候,入栈顺序是自右向左,因此先执行右边的 n++,由于 ++ 在后是先引用 n 本身的值再自增,因此 x = 0,然后 n 的值自增为 1,到左边再次引用 n 的时候,打印 n = 1。
然后这个程序还有个问题,为了不使内联函数打印 n 报错,你定义多了一个全局变量 n,跟局部变量冲突……(当然这不影响实验结果)。 |