社区
C++ 语言
帖子详情
许多头文件中都有#ifndef XXX_H #define XXX_H #endif XXX_H.请问我什么要这么定义?XXX_H有是什么东西?
lieyu063
2004-11-21 08:44:57
rt.
...全文
1140
12
打赏
收藏
许多头文件中都有#ifndef XXX_H #define XXX_H #endif XXX_H.请问我什么要这么定义?XXX_H有是什么东西?
rt.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 进来.
这样就会产生重复定义.这样就能解决这个问题啦.
《C深度解析》第二章 C预编译——宏
定义
、条件编译、
头文件
包含、特殊预编译关键字
#if、#else、#elif #
endif
、#if
def
和#
ifn
def
、#if与
def
ine
d、条件编译与配置文件 (4)一些特殊的预编译关键字与实际应用:
def
ine
d、#error、#line、#与##、#pragma (5)文件包含:是否只能包含.h文件,<...
#
ifn
def
#
def
ine
#
endif
在这段代码
中
,#
ifn
def
xxx
_H 检查是否没有
定义
xxx
_H,如果没有
定义
,那么就执行 #
def
ine
xxx
_H
定义
它。#
ifn
def
xxx
_H:这是条件编译的开始,意思是“如果
xxx
_H 还没有被
定义
”(通常
xxx
_H 是
头文件
的名称,用大写字母和下划线表示),则执行下面的代码块。#
ifn
def
xxx
_H、#
endif
//
xxx
_H 和 #
def
ine
xxx
_H 三者之间是一种条件编译的结构,用于确保
头文件
只被编译一次,避免重复
定义
和编译错误。
关于C++
中
#
ifn
def
XXX
_H #difine
XXX
_H #
endif
那些事
在学习C++的过程
中
,我们经常发现在
头文件
前部有一些标识符
定义
,比如:#
ifn
def
XXX
_H #difine
XXX
_H 这些是什么呢? #
ifn
def
SeqList_H #
def
ine
SeqList_H #
endif
这样一段话的意思是 如果没有
定义
头文件
的别名,就
定义
它 他的作用是,如果有其他文件多次调用这个
头文件
,那么为了防止重复
定义
,加入 判断语句,只有第一次
.h
头文件
中
定义
#
ifn
def
、#
def
ine
和#
endif
的作用
#
ifn
def
myfunc_h #
def
ine
myfunc_h #
endif
此写法的含义如下:如果没有
定义
该
头文件
,那就引入该
头文件
,否则就不需要引入。 此写法一般写在
头文件
中
防止该
头文件
被重复引用,被重复引用是指在同一个.cpp文件
中
多次调用了该
头文件
,比如a.h包含了c.h,而b.h包含了a.h和c.h,此时b.h就重复引用了c.h。
头文件
被重复引用引起的后果:可能会报错,增加编译量。 #include<>和#include ""两种写法格式区别: #include<>
讨论#
ifn
def
与#
def
ine
讨论#
ifn
def
与#
def
ine
摘要:在进行
头文件
的处理时,很多时候关于#
ifn
def
与#
def
ine
会被大家机械的使用不知所以然,下面总结一下,并配合一定的实例,帮助理解。 在
头文件
中
,#
ifn
def
xxx
_H_ 表示,如果文件
中
没有 包含
xxx
_H_ 如果是真的,接下来继续执行,如果为假的,接下来就是:` #
def
ine
xxx
_H_ ....... ....... #
endif
...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章