作者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/cn.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