#ifndef
解释:if not defined
类型:条件编译(预处理共分:宏定义、文件包含和条件编译3种)
意义:可根据是否已定义一个变量来进行分支选择,一般用于调试。
作用:
1、防止头文件的重复包含和编译
2、便于程序调试
使用方法:
#ifndef x /*先测试x是否被宏定义过*/
#define x
程序段1 /*若x没有被宏定义过,定义x,并编译程序段1*/
#else
程序段2 /*若x已定义,则编译程序段2,忽略程序段1*/
#endif /*结束if语句*/
注意:#ifndef的效果是防止一个源文件两次包含头一个头文件。
若有一个C源文件,它包含了很多头文件,如:A头文件和B头文件,而头文件B又包含了头文件A。则最终的效果是:该源文件包含了2次A头文件。若在头文件A里定义了结果体或类类型,则编译时会报大量的重复定义错误。
如:要编写头文件test.h
在头文件开头写两行:
#ifndef __TEST_H
#define __TEST_H
文件结尾写上:
#endif
即:
#ifndef __TEST_H
#define __TEST_H
test代码段
#endif
这样一个工程文件里同时包含了2个test.h,也不会出现重定义的错误。
分析:
第一次编译,__TEST_H未被定义,定义__TEST_H.
第二次编译,__TEST_H已被定义,不再宏定义__TEST_H,也不执行test代码段。