#ifndef HEADER_FILE
#define HEADER_FILE
the entire header file file
#endif
此构建体通常被称为包装#ifndef。当该头被再次包含,条件将是假的,因为HEADER_FILE定义。预处理器将跳过该文件的全部内容,而编译器不会看到它的两次。
计算包函
有时,有必要选择的几个不同的一个头文件被包含到程序中。它们可能会指定的配置参数被用于对不同类型的操作系统,例如。可以用一系列条件句做到这一点,如下所示:
#if SYSTEM_1
# include "system_1.h"
#elif SYSTEM_2
# include "system_2.h"
#elif SYSTEM_3
...
#endif
但是,随着它的内容增长就会变得单调乏味,代替预处理器提供了使用宏的头文件名。这就是所谓的计算包括。而不是写一个头文件名#include直接参数,只需把宏的名字代替:
#define SYSTEM_H "system_1.h"
...
#include SYSTEM_H
SYSTEM_H将被扩展,而预处理器将寻找system_1.h仿佛的#include已经写了原来的方式。 SYSTEM_H可以通过Makefile -D选项定义。
关于头文件重复包含
1、如果头文件A包含头文件C,同时头文件B也包含头文件C,而写的程序中包含了头文件A,头文件B,然后在编译的时候就会出现头文件C重复包含的错误
这个错误 只要在自己写的头文件中这样写
#ifndef X //X为你的标识符,保持唯一,可以长点,比如 #ifndef _INCLUDE_XXXXXX_H_
#define X
//这里是你的头文件
#endif
上面的X可以随便取名(可以用来“装”头文件,所以X一般取名为大写的头文件的名字,只不过把"."换成“_”),只要保证#ifndef和#define后面是同一个X就可以了,只是一个标识而已。翻译成中文就是,如果已经#define X了,后面的就不执行了。这样在同一个c文件中,保证可以只#include一个头文件,避免“在同一个c文件中对一个头文件include两次”的错误(第一次包含了该头文件后,就已经#define 了一次X,第二次包含时会遇到“#ifndef X”的判断,既然已经定义,只好对这个判断说yes了,后面的不再执行,
头文件就不会再加进去)。
2、写的代码里, 头文件A需要包含头文件B,头文件B需要包含头文件C,这种情况#include A就没有问题,不会出现重复包含的错误
注意:这里的#ifndef预处理是要解决在同一个c文件中包含了两次同一个头文件的错误,而在不同的c文件中是可以包含同一个头文件的。










