关于c++头文件预处理的问题。

鸣鸣Amadues 2010-02-25 06:36:00
c++标准头文件通常是。
#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif /* __INCvxWorksh */
头文件中的编译宏“#ifndef __INCvxWorksh、#define __INCvxWorksh、#endif” 的作用是防止该头文件被重复引用。


我对这段话不是非常理解,何谓重复引用?
另外就是为什么要进行定义#define __INCvxWorksh?__INCvxWorksh这个东西和什么有关联?
...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸣鸣Amadues 2010-02-25
  • 打赏
  • 举报
回复
这样就不会重复定义了吧?

不过不进行重复定义就不会出现重复引用的情况么?
InfidelX 2010-02-25
  • 打赏
  • 举报
回复
引用 1 楼 loaden 的回复:
如果a.h中包含b.h
而c.h也包含了b.h

最后:d.h包含了a.h和c.h
怎么办?

会出现重复定义的!

正解~
forster 2010-02-25
  • 打赏
  • 举报
回复
#include头文件相当于 把这个头文件内容替换到#include处
如果加上这个定义就不不怕#inlude两次了

//inlude A.h
//in A.h including INCvxWorks.h
//编译
#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif /* __INCvxWorksh */

//inlude b.h
//in b.h also including INCvxWorks.h
//不编译
#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif /* __INCvxWorksh */
baihacker 2010-02-25
  • 打赏
  • 举报
回复
a.h
#include "b.h"
...

b.h
#include "a.h"
...

这样就完了。
如果a,b都有保护。

设在b.cpp中include了b.h
首先b中的那个宏会定义一次,然后包含a.h
在a.h中定义一次a中的那个宏,然后包含b.h
在包含b.h中,发现b中的宏已经定义过了,直接跳过。
回到a.h,把a包含完了,然后回到b.h,最后回到b.cpp。

__INCvxWorksh
__INCvxWorksh

这些就相当于是给你的头文件一个标识。
malu_1982 2010-02-25
  • 打赏
  • 举报
回复
连环包含,或者是嵌套包含了同一个文件

定义了上面的话意思就是说,如果没定义该宏就定义,如果定义了就跳过该文件
老邓 2010-02-25
  • 打赏
  • 举报
回复
如果a.h中包含b.h
而c.h也包含了b.h

最后:d.h包含了a.h和c.h
怎么办?

会出现重复定义的!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧