c++头文件中 #ifndef是什么意思?

有这样一段代码,我不明白其中的#ifndef是什么含义。请看代码如下:#ifndefns_telnet_h#definens_telnet_h......#endif我能... 有这样一段代码,我不明白其中的#ifndef是什么含义。请看代码如下:

#ifndef ns_telnet_h
#define ns_telnet_h

...
...

#endif

我能理解的是ifndef = if not defined,如果没定义;但
#define ns_telnet_h

是什么含义呢?#define 一般不都是#define + 常量名 + 常量值吗?为什么这里没有常量值呢?
谢谢!
谢谢vbtraz!谢谢你回答我的基础问题。

你的回答真清楚!
展开
 我来答
vbtraz
推荐于2017-10-13 · TA获得超过5532个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4468万
展开全部
定义成空的呗

这就是个小技巧, 为了防止两次include同一个头文件。
第一次include的时候由于 ns_telnet_h没定义,所以宏里面的内容(也就是头文件的全部内容了) 会被编译。 而第二次include它的时候由于 ns_telnet_h已经被定义,所以宏里面的内容不会被编译。 这个宏没define成任何有意义的东西,是因为实际上只是需要ns_telnet_h存在就可以,它的内容无所谓
万夏罕癸
2020-01-30 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:26%
帮助的人:837万
展开全部
#ifndef
xxx//如果没有定义xxx
#define
xxx//定义xxx
#endif
//结束如果
这个用法主要是在头文件中,主要是为了防止类重复的include,所以在类的头文件之前加上前面两个,用类名替代xxx,在最后加上最后一句。
--------------------------------------------------
另,谢谢楼下的补充,不过有一点要注意的是,在c++里面中,尽量不要使用#define定义常量。见:
5.1
为什么需要常量
如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?
(1)
程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。
(2)
在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。
(3)
如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。
l
【规则5-1-1】
尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。
例如:
#define
max
100
/*
c语言的宏常量
*/
const
int
max
=
100;
//
c++
语言的const常量
const
float
pi
=
3.14159;
//
c++
语言的const常量
5.2
const

#define的比较
c++
语言可以用const来定义常量,也可以用
#define来定义常量。但是前者比后者有更多的优点:
(1)
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
(2)
有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
l
【规则5-2-1】在c++
程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
5.3
常量定义规则
l
【规则5-3-1】需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。
l
【规则5-3-2】如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

推荐于2017-09-26 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:2亿
展开全部
条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。
了解:条件编译当然也可以用条件语句来实现。 但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。如果条件选择的程序段很长,采用条件编译的方法是十分必要的。
#ifndef 标识1 //判断"标识1"是否定义,如果被定义则返回假,如果没有被定义则返回真。
/*举例:*/
语句1 #ifndef 标识1
语句2 #define 标识1
语句3 #endif
语句4 ……
语句5 ……
该段代码意思是:如果标识1没有被定义,则重定义标识1,即执行语句2、语句3;如果标识1已经被定义,则直接跳过语句2、语句3,直接执行语句4、语句5、……
/***********************************/
备注:#ifndef 和 #endif 要一起使用,如果丢失#endif,可能会报错。
关于它更详细的介绍,请见百度百科:http://baike.baidu.com/link?url=SDpXsjGHpzgzLJt0cjLEY-gmIKStEbziY-T8RtKpbnlsv0VDT595Ga2Zt3S3LI-_t2pqfsiaepD76s2RzyiIrq
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式