#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)
可有人請解釋一下嗎?調用一個函數,但我不明白的邏輯運算
#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)
可有人請解釋一下嗎?調用一個函數,但我不明白的邏輯運算
你實際上並沒有調用函數,而是使用類似函數的宏。宏執行文本替換,所以擴展此之後:
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));
這是什麼打印?從邏輯上講,它應該打印「10,5,125」。 –
我猜這是印刷'10,5,5'? – Kupiakos
@ Kupiakos哦。這就說得通了。他把自己的宏觀定義得很差。 –