最近由于项目原因需要用到C语言,记录一下看代码时遇到的问题以及知识盲区。
防止头文件的重复包含和编译
C语言编译系统包括预处理,编译和链接等部分。C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。
#ifndef 是预处理命令(宏定义、文件包含、条件编译)中的“条件编译”。
#ifndef x //先测试x是否被宏定义过
#define x //如果没有宏定义下面就宏定义x并编译下面的语句
...
#endif //如果已经定义了则编译#endif后面的语句
条件指示符#ifndef检查预编译常量在前面是否已经被宏定义。如果在前面没有被宏定义,则条件指示符的值为真,于是从#ifndef到#endif之间的所有语句都被包含进来进行编译处理。
相反,如果#ifndef指示符的值为假,则说明他在前面已经被宏定义过,它与#endif指示符之间的行将被忽略。条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。
如果一个项目里有两个.c文件(A/B)同时include了同一个头文件(H),而编译时,这两个.c文件要一同编译成一个可运行文件,在文件A中include了头文件H,在文件B中再次include头文件的话,会产生声明冲突。而将头文件内容放到#ifndef #endif 中,会在include之前判断该头文件是否已经被include过,避免重复引用。
参考链接
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/1853.html