2014-10-03 57 views

回答

5

它還定義了一個宏,被替換爲無。

例如在標頭警衛的情況下。

在這種情況下,我們只需要知道後衛宏是否已被定義 - 我們可以檢查與#ifdef#ifndef。它不需要被定義爲任何東西,所以我們通常不會打擾任何事情。這給出了後衛的通常形式

#ifndef HEADER_H // check whether it's defined, skip to "endif" if so 
#define HEADER_H // define it; doesn't need to contain anything 

// header contents 

#endif    // skip to here (end of header) if already defined 

因此,包括它一次將包括內容和定義宏;包括它第二次會無害地跳過內容,而不是重複它們,(可能)導致錯誤。

2

它定義了指定的標識符字面意思沒有。就那麼簡單。

1

它定義了一個空的宏。在代碼中遇到該宏詞時,它將被替換爲無。

這並不完全沒有用,因爲仍然可以用#ifdef檢測宏。它通常用於提供不同代碼段的可選編譯。

當用作包含警衛(使用#ifndef)時,它將防止在單個源文件中多次處理標題。

3

這種類型的宏沒有任何替代。

#define FOO 

這是當宏僅用於測試是否存在有用:

#ifdef FOO 

#if defined(FOO)