在同一文件中只能将同一个头文件包含一次。记住这个规则很容易,但是工程项目多了之后,很可能在不知情的情况下包含同一文件多次。这时候预处理器编译指令#ifndef(即 if not defined)可以很好地帮助我们解决问题。
原因:
防止重复被引用
定义
#ifndef x
#define x
...
#endif
这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。 C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。
千万不要忽略了头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。
条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。了解:条件编译当然也可以用条件语句来实现。 但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。如果条件选择的程序段很长,采用条件编译的方法是十分必要的。
头文件一般是声明函数和全局变量,如果一个函数在源文件重复声明两次没什么影响但是作为全局变量只能声明一次,不然会报错,所以加入ifndefine是很有必要的。
所以一般ifndef x,这里的一般是头文件的大写比如ifndef TEST.H