簡體   English   中英

無法理解C中程序的輸出

[英]Unable to understand the output of program in C

編輯:此問題不是重復的,因為在這種情況下行為不是不確定的。

為什么下面的程序在第一行中將輸出打印為231?

我對此有兩個疑問:

  1. 當我做后綴增量時,在調用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 
  2. 后綴操作是否在執行語句后發生? 考慮下面的示例。

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM