2016-06-21 66 views
0
#define N 4 
#define EXPON(x) x * x * x 
#define HALF(x) x * 0.5 

int main(){ 
    int i = N + 6; 
    int j = HALF(i); 
    int k = EXPON(j + 0); 
    printf("%d %d %d\n",i, j, k); 
} 

j回報是有點不等於總結的(j+0)可有人請解釋一下嗎?調用一個函數,但我不明白的邏輯運算

+4

這是什麼打印?從邏輯上講,它應該打印「10,5,125」。 –

+2

我猜這是印刷'10,5,5'? – Kupiakos

+0

@ Kupiakos哦。這就說得通了。他把自己的宏觀定義得很差。 –

回答

8

你實際上並沒有調用函數,而是使用類似函數的宏。宏執行文本替換,所以擴展此之後:

int k = EXPON(j + 0); 

成爲這樣的:

int k = j + 0 * j + 0 * j + 0; 

哪個(由於運算符優先級)是一樣的:

int k = j + (0 * j) + (0 * j) + 0; 

這是不是你想要什麼。

當definining一個函數宏,你應該始終圓括號參數結果表達式:

#define EXPON(x) ((x) * (x) * (x)) 

所以,現在你會得到你所期望的:

int k = ((j + 0) * (j + 0) * (j + 0)); 
+0

你打敗了我。幾乎相同的答案。 –

+1

你也應該在結果周圍加上括號。 – Barmar

+0

@Barmar好的。編輯。 – dbush