2014-06-06 92 views
1
#include<stdio.h> 
#define MUL(a, b) a##b 
int main() 
{ 
    //static int a = 5; 
    // while(--a) 
    printf("%d",MUL(2+3,4+5)); 
    //{ 
     // printf("%d ",a); 
//  main(10); 
    //} 

    return 0; 
} 

OUTPUT: 41 

爲什麼程序的輸出是41? 我正在使用令牌粘貼操作符來合併這兩個數字。 我期待的輸出爲59,但其顯示41萬家樂內部工作

+0

請忽略comments.and輸出是41.sorry錯誤的輸出。 –

+0

嗨,歡迎來到stackoverflow。您可以隨時編輯您的問題。使用這個而不是在評論中糾正。 – bolov

回答

1

更換之後,它看起來像

printf("%d", 2+34+5)); // 2+34+5 = 41 

它永遠不會打印 28

MUL的參數在更換前不會評估。

1

當一個宏展開時,每個'##'運算符兩邊的兩個令牌被組合成一個令牌。表達式不被評估並傳遞給宏。

在這種情況下,擴展將是2+3 ## 4+5 i.e 2 + 34 + 5 = 41

0
MUL(2+3,4+5) 

將擴大到

2+3##4+5 

這是

2+34+5 

它的計算結果爲41

要獲得59,你需要調用MUL(5,9)。對於連MUL((2+3),(4+5)),預處理將首先完成,這將使它到

(2+3)(4+5)

,並會導致編譯錯誤。

MACRO在編譯階段之前被替換。