C语言头文件中 #ifndef #define #endif 的作用

头文件的第一个功能就是 #include 指令,即在预编译时把它后面所写的那个文件的内容,完完整整地一字不改地包含到当前的文件中来。

多次包含相同的头文件,会导致编译器多次编译该头文件,代码量小还好,代码量一大会使整个项目的编译速度变的缓慢,甚至会使程序在编译链接的时候崩溃。

C语言头文件中 #ifndef #define #endif 的作用

另外,C头文件也用来对函数原型或变量进行声明,以及宏定义等。C的头文件也可以用来进行定义(函数或变量定义)。但C语言语法中要求对于变量和函数是不能重复定义的,重复包含会导致编译出错。

如当头文件a.h中有一个对变量的定义:

int x = 10;

当多次包含该文件时,就变成了:

int x = 10;

int x = 10;

......

int x = 10;

这样就会出错。

假如头文件中有定义 static 变量,就会在每个文件中产生静态变量,逻辑就更乱了。

为避免上述错误,头文件中建议这样写:

#ifndef _XXX_H_ //该文件的标识符

#define _XXX_H_

头文件内容

#endif

第一次编译该头文件时,没有定义 _XXX_H_,那么就执行下面的程序,首先定义_XXX_H_,然后继续执行头文件的内容。这样的话第一次包含该头文件时,该头文件就被编译器编译。

而当该头文件被第二次包含时,由于 _XXX_H_ 已经被定义,所以后面的的代码编译器就不编译了,直接忽略,这样就防止了头文件的重复包含。


分享到:


相關文章: