2014-06-20 100 views
1

通常使用包括警衛,當我寫出來,像這樣:爲什麼一些包括衛兵有定義的價值?

#ifndef FILENAME_H 
#define FILENAME_H 

... 

#endif // FILENAME_H 

現在,在一些圖書館的我見過類似的東西:

#ifndef FILENAME_H 
#define FILENAME_H 1 

... 

#endif // FILENAME_H 

一些啓發式算法後,我沒有找到任何理由來爲什麼包括古拉德需要被初始化。

是否有任何理由這樣做?

回答

1

儘管我從來沒有見過這樣的編譯器,但我被告知一個「空的」定義可能被視爲未定義。 我對哪種編譯器的行爲非常感興趣。

即使C89狀態: 3.8.1條件包含 約束

控制條件包含應整數表達式表達式[...]的形式

定義的標識符的

(標識符)

如果標識符當前被定義爲宏名稱,則其評估爲1(即,如果它是預定義的或者它具有一直是#define預處理指令的主題,而沒有帶相同主題標識符的介入#undef指令),如果不是,則爲0。

+0

不幸的是我不記得我在哪裏看到的,這可能是一些數學函數庫。它在linux下。 – Ragas