#ifndef的用法

#ifndef的用法,第1张

#ifndef是宏定义里面的一种,用来防止防止头文件的重复包含编译

比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。

如果把头文件的内容都放在#ifndef和#endif中,不管你的头文件会不会被多个文件引用,你都要加上这个,就可以避免冲突的问题。

#ifndef可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种——条件编译。 C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。

扩展资料:

#ifndef一般格式是这样的:

#ifndef <标识>

#define <标识>

......

#endif

<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h

#ifndef _STDIO_H_

#define _STDIO_H_

......

#endif

参考资料来源:百度百科-#ifndef

#ifndef _a_h//判断是否已经定义了,没定义的话则有以下定义

#define _a_h

//头文件内容

#endif

每个CPP文件是一个最小编译单位,用到输出流对象,当然应该包含相应的头文件,所以应加上#include<iostream>

写在你防止重复定义的那个头文件里

是为了防止重复包含,产生重定义的问题。因为头文件实在太多了,而且头文件又包含头文件,比如你include头文件a.h, 但其实它在前面你用过的头文件x.h已经包含过了,但你又不知道,这样编译会产生太多重复包含,重定义的错误,如果包含头文件太多,层次太深,排除错误几乎是难以完成的。 但如果你在每个头文件里都有个

#ifndef Xxx

#define Xxx

编译器只考虑最一开始包含那个头文件,后面通过其它渠道包含的相同头文件,因为宏xxx已经定义过,就不再解析这个头文件了。所以,就不会产生重定义问题,又会使头文件中的定义正好发生一次作用。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11855637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存