2017-02-22 26 views
-1

現在我又混淆了。 在我們以前的C代碼中,我發現了一些奇怪的部分,似乎是打印到終端的轉儲函數,我不知道是否可以解釋爲什麼使用「#if 0」?「#if 0 ... #endif」聲明的目的是什麼

我的猜測是,這是註釋掉的代碼的老辦法....

#if 0 
dump(b, cnt) 
    char *b; 
    int cnt; 
{ 
    int i; 

    if (cnt == 0) 
    return; 

    for (i=0; i < cnt; i++, b++){ 
    if ((i % 16) == 0) 
     printf("\n"); 
    printf("0x%02x ", *b); 
    } 
} 
#endif 
+2

它允許您輕鬆啓用/禁用一段代碼(例如,用於測試目的)。 –

+0

而你需要考慮的不等於評論。 –

回答

1

這不是一個「老辦法」,這是一個獨立的方式。這使用預處理器剪切包含的行,所以編譯器從不會看到它們。

這是一種「特徵切換」的極端形式;往往你看到這樣

#if defined SOME_HANDY_FEATURE 
void use_some_handy_feature(int handyness) 
{ 
    ... 
} 
#endif 

但這裏的#define代碼由字面0這當然是假的替換,所以代碼塊被刪除。

即使刪除的代碼包含註釋,它也能正常工作,因爲它們不會嵌套,所以正常的/* ... */註釋並不適用。

+0

謝謝你們,我的直覺是正確的。對不起,我錯過了之前曾被問過;(我的錯誤。 –