许多头文件中都有#ifndef XXX_H #define XXX_H #endif XXX_H.请问我什么要这么定义?XXX_H有是什么东西?

lieyu063 2004-11-21 08:44:57
rt.
...全文
1139 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
auf 2004-11-22
  • 打赏
  • 举报
回复
是预定义了,防止重复包含头文件
CgPanda_ 2004-11-22
  • 打赏
  • 举报
回复
长见识了
sharkhuang 2004-11-22
  • 打赏
  • 举报
回复
#pragma once window的东西不公用
lazyboya 2004-11-22
  • 打赏
  • 举报
回复
主要是用来解决重复定义的问题,在C++中函数和变量之类的只能被定义一次.
aa1298 2004-11-22
  • 打赏
  • 举报
回复
是为了防止重复定义.
kunpengzhi 2004-11-22
  • 打赏
  • 举报
回复 1

#ifndef ABC_H
#define ABC_H
......................
#endif

条件指示符#ifndef检查ABC_H在前面是否已经被定义这里ABC_H是一个预编译器常量.
习惯上预编译器常量往往被写成大写字母.如果ABC_H在前面没有被定义则条件指示符的值为真
于是从#ifndef 到#endif 之间的所有语句都被包含进来进行处理相反如果#ifndef 指示符的值为假
则它与#endif 指示符之间的行将被忽略.
为了保证头文件只被处理一次, 把如下#define 指示符
#define ABC_H
放在#ifndef后面这样在头文件的内容第一次被处理时ABC_H将被定义
从而防止了在程序文本文件中以后#ifndef 指示符的值为真.
只要不存在两个必须包含的头文件要检查一个同名的预处理器常量这样的情形这
个策略就能够很好地运作.

可参考《C程序设计语言(K&R)》,《C++程序设计语言(B_S)》, 《C++ Primer(Lippman)》
greenteanet 2004-11-22
  • 打赏
  • 举报
回复
可以看看msdn里面的说法...
fanbonbon 2004-11-21
  • 打赏
  • 举报
回复
防止重复定义
写在myString.h的开头
也就是判断myString.h里那个类定义了没
已经定义的话就跳过#defined
直接#endif
花生小海盗 2004-11-21
  • 打赏
  • 举报
回复
#pragma once 直接放在文件开始的地方就可以了

放在myString.h中
lieyu063 2004-11-21
  • 打赏
  • 举报
回复
请问楼上的:
1,#pragma once怎么用啊?
2,如果我写一个类。myString.h 其中实现在myString.cpp中,请问:我应该把
#ifndef XXXXX_H
#defined XXXXX_H
#endif
写在myString.h myString.cpp的那个文件中呢?
边城狂人 2004-11-21
  • 打赏
  • 举报
回复
这样主要是为了避免重复编译头文件。
一般是这样的形式

#ifndef XXXXX_H // 如果没有定义 XXXXX_H
#defined XXXXX_H // 先定义 XXXXX_H,那么下一次编译到这个头文件的时候上一句条件不成立,下面的内容就不会再编译了。

// 头文件中的代码

#endif

在 C++ 中,可以用 #pragma once 来代替
即使用了 #pragma once 之后就可以不用那么麻烦去判断有没有编译过这个头文件了,那个由编译器自己判断了。
kudoxinyiji 2004-11-21
  • 打赏
  • 举报
回复
据我所知是为了防止重复定义.好比一个 .h ,可能会在好几个 .cpp 中被 include 进来.
这样就会产生重复定义.这样就能解决这个问题啦.

64,643

社区成员

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

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