[英]Unable to understand the output of program in C
編輯:此問題不是重復的,因為在這種情況下行為不是不確定的。
為什么下面的程序在第一行中將輸出打印為231?
我對此有兩個疑問:
當我做后綴增量時,在調用max函數之前不應增加x的值。 因此輸出應該是第一位的,而不是我認為的2位。 我想念什么?
#define prn(a) printf("%d",a) #define print(a,b,c) prn(a), prn(b), prn(c) #define max(a,b) (a<b)? b:a main() { int x=1, y=1; print(max(x++,y),x,y); printf("\\n"); print(max(x++,y),x,y); }
輸出:
231 451
后綴操作是否在執行語句后發生? 考慮下面的示例。
int main() { int x = 0, y = 1; int a = x++ /*x is incremented hereafter?*/+ y; // line 1 /* Or x is incremented now after execution of above line?*/ // line 2 int b = 0; }
讓我走這條線
print(max(x++,y),x,y);
需要注意的重要一點是C預處理程序是一個宏預處理程序(允許您定義宏),可以在編譯程序之前對其進行轉換。 這些轉換可以包括頭文件,宏擴展等。
所有預處理指令均以#符號開頭。 例如,
#define PI 3.14
告訴編譯器在任何地方將PI值替換為3.14。
c source code->preprocessor->compiler
因此print(max(x ++,y),x,y)在宏中擴展為
1. prn((x++<y) ? y:x++), prn(x), prn(y)
2. printf("%d",(x++<y)? y:x++), printf("%d",x), printf("%d",y);.
在這里得到處理,您可以在這里仔細檢查兩件事
在檢查時
x++<y ,the x++ value is 1
然后x值變成2
所以打印2
然后在打印時我們也寫了x ++,這意味着x ++ VALUE是2,但是
之后x值為3
所以3被打印出來,其后跟y為1
就是這樣
2.TO給你一個很好的直覺和后期增量
讓我舉個例子
int x=2;//value of x is 2
x++;//here x++ value is 2
在此行執行后,x值更改為3
++x//here x++ value is 4 and also x value is 4.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.