2013-04-27 38 views
4

什麼是「#define XXX」的值?什麼是「#define XXX」的價值?

它沒有任何價值,但它似乎沒有編譯錯誤。通常定義爲 定義類型替換,但它是定義類型wiouht替換str。

+2

沒有價值。在遇到該聲明後,XXX被預處理器簡單地認爲是*定義的。 – 2013-04-27 23:22:56

回答

3

正如其他人所說,它的定義是空的,也就是說,在大多數情況下,它的替換文本是空的。然而,在常量表達式爲#if聲明,其值爲0:

#define XXX 
#if XXX == 0 
    // yes, we get here 
#elif 
    // no, we don't get here 
#endif 

對於未在所有定義的名稱同樣的事情:

#if YYY == 0 
    // yes, we get here 
#elif 
    // no, we don't get here 
#endif 

這兩個之間的區別是,後者沒有被定義,而前者是:

#ifdef XXX 
    // yes, we get here 
#endif 

#if defined(XXX) 
    // yes, we get here 
#endif 

YYY那些測試的既不成功。

11

它會用什麼代替替換文本:

#define FOO 

int FOO main() FOO 
{ 
} 

此外,#ifdef FOO會成功。


空定義可以是相當有用的,例如在此(幼稚)函數形式:

#ifndef NDEBUG 
# include <cstdlib> 
# define MakeSureThat(X) if (!(X)) { std::abort(); } 
#else 
# define MakeSureThat(X) 
#endif 

用法:

void do_stuff(Foo * p) 
{ 
    MakeSureThat(p != nullptr);  // won't generate any code if NDEBUG 
} 
4

它將限定XXX其餘部分的像往常一樣,行

沒關係,在這種情況下它是空的。

這裏沒有任何例外。