在C/C++编程中,头文件常常被用于声明函数,变量和结构体等。在将一个头文件包含到另一个文件中时,为了防止一个头文件被包含多次,会用到指令“#ifndef”的预处理命令。
ifndef 的全称是“if not defined”。实际上,如果指定的宏已经通过 #define进行定义,那么代码就不会执行指令 #ifndef 和 #endif 之间的语句。
使用 #ifndef 的语法如下所示:
#ifndef MACRO_NAME
#define MACRO_NAME
code
#endif
其中,MACRO_NAME 是你所定义的宏的名称。如果这个宏没有被定义,那么这个条件就是成立的。这时候,宏定义 #define 就会被执行。
当一个头文件被包含到源代码文件中时,这个源代码文件中通过 #ifndef 和 #endif 所包含的代码就不会被编译器处理。这就能避免头文件被包含多次而导致的编译错误。
ifndef 有以下几个优点:
以下是一段使用了 ifndef 的示例代码:
#ifndef MATH_EXAMPLE_H
#define MATH_EXAMPLE_H
#include
using namespace std;
class math_example{
public:
int add(int a,int b);
int minus(int a,int b);
int multiply(int a,int b);
int divide(int a,int b);
};
#endif
在上面的代码中,头文件 math_example.h 中的 ifndef 和 endif 语句会避免这个文件被重复编译,从而提高编译效率。同时,这也是一个在跨平台移植中经常使用的技巧。