2015-06-27 31 views
0

對於下面的代碼,我得到的輸出爲 - Geeks。c中的以下代碼宏的輸出

#include <stdio.h> 
#define ISEQUAL(X, Y) X == Y 
int main() 
{ 
    #if ISEQUAL(X, 0) 
     printf("Geeks"); 
    #else 
     printf("Quiz"); 
    #endif 
    return 0; 
} 

解釋這種輸出的原因。

+1

注意:你應該**總是**在身體中的parenthetise宏參數。否則,由於_operator優先級_,您可能會得到錯誤的結果。這些通常很難找到。 – Olaf

回答

5

條件宏#if ISEQUAL(X, 0)擴展爲#if X == 0。預處理結束後,所有未定義的宏都將使用默認值0進行初始化。由於宏X尚未定義,因此使用0進行初始化。因此,「極客」被打印。

+1

「預處理結束後......」好吧,預處理之後,再也沒有對宏進行實際處理了。如果'#if'被評估時'X'沒有被定義,它就被認爲是'0',但沒有被「初始化」(它實際上會定義它) – Olaf