作者Laleh (Laleh)
看板C_and_CPP
標題[問題] c++ 標頭檔的 #ifndef xxx 用意
時間Wed Dec 2 21:53:13 2015
在網路上找資料時 看到下面這個範例
// ------------------
#ifndef __INCvxWorksh
#define __INCvxWorksh
// ------------------
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
其中我自己在看code的時候也常常會看到
但是不太懂它的意義 有看到如下說明
#ifndef __INCvxWorksh、#define __INCvxWorksh、#endif” 的作用是
防止該標頭檔被重複引用。
但是還是不懂 因為不管 __INCvxWorksh 有沒有被 def
下面的程式碼應該都會被編譯一次 那到底這樣寫有什麼用
或在什麼情況下有用 有例子嗎?
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.173.206
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1449064395.A.D5D.html
1F:推 stupid0319: 寫Driver? 12/02 22:04
2F:→ jfcherng: if (not define A) { 12/02 22:05
3F:→ jfcherng: define A; 12/02 22:05
4F:→ jfcherng: // other codes 12/02 22:05
5F:→ jfcherng: } // #endif 12/02 22:05
6F:→ jfcherng: 類似這樣被解釋的吧 12/02 22:06
7F:→ Laleh: 那跟 #pragma once 有差異嗎 thx~ 12/02 22:10
8F:→ stupid0319: 說不是有其他標頭檔有相同的#define __INCvxWorksh 12/02 22:21
10F:推 chuegou: 是指編譯過程中遇到第二次#include "INCvxWorks.h" 12/03 00:32
11F:→ chuegou: 就不會重複編譯吧 12/03 00:33
12F:推 overhead: 很多檔案include來include去時,.h檔常常會被重複編譯 12/03 00:34
13F:→ overhead: 你應該是沒有注意到檔案有被重複編譯的可能性吧? 12/03 00:35
14F:→ longlongint: 你知道 Macro 嗎 12/03 06:00
15F:推 OPIV: 和 #pragma once 是一樣的 12/03 08:37
16F:推 IhateOGC: 你知道重複宣告嗎? 12/08 13:14