首先要清楚#ifndef和#endif是配对的,#define是用来定义宏文本的,这个文本就是用作#ifndef的判断条件。
-
#ifndef(If Not Defined):#ifndef是一个条件预处理指令,用于检查指定的标识符是否已经被定义。- 如果指定的标识符未定义,
#ifndef后面的代码将被编译,否则将被忽略。 - 通常,这个标识符是一个宏定义,用来控制编译过程中的条件性包含。
示例:
#ifndef MY_HEADER_H #define MY_HEADER_H // 这里放置你的代码,只有当 MY_HEADER_H 未定义时才会编译 // 即前面的编译中,如果有了my_header.h文件里的代码,就不会编译下面的代码了 #endif
-
#define:#define是用来定义宏的预处理指令。宏是一种文本替换机制,可以将标识符替换为指定的文本。- 它通常与
#ifndef一起使用,用来定义标识符,以便在之后的代码中检查是否已经定义。 - 通常,宏名称用大写字母表示,以便与变量和函数名区分开来。
示例:
#define MY_HEADER_H // 这里的代码可以包含任何你想要在头文件中定义的内容
在上述示例中,#ifndef 和 #define 一起使用,以确保头文件只被编译一次。如果 MY_HEADER_H 已经被定义,#ifndef 会忽略后续的代码,防止头文件被多次包含。
这种条件编译的技术在C++中常用于创建头文件保护(header guards),以避免多次包含同一个头文件,从而防止重复定义的问题。这有助于确保代码的一致性和正确性,并提高编译效率。头文件保护也可用于包含特定平台或条件下的代码,以满足不同情况下的编译需求。