一、C++中#ifndef与#endif含义
说明: #ifndef
和 #endif
是 C++ 预处理器指令,它们通常用来避免头文件的重复包含。
头文件是 C++ 中常用的一种代码组织方式,可以将一些公共的代码定义放到一个头文件中,然后在其他文件中通过 #include
指令引用该头文件。然而,如果在多个文件中引用了同一个头文件,那么就会出现重复定义的问题,从而导致编译错误。
为了解决该问题,可以在头文件的开头添加 #ifndef
和 #endif
指令,如下所示:
//testApp.h
#ifndef __DEBUG_RUN_TEST_H__
#define __DEBUG_RUN_TEST_H__
#include "testCommom.h"
#include "testApi.h"
.
.
.
#endif //__DEBUG_RUN_TEST_H__
上述代码的含义为:如果 __DEBUG_RUN_TEST_H__
宏未被定义,那么就定义它,并执行头文件内容。如果 __DEBUG_RUN_TEST_H__
宏已经被定义了,那么就不再执行头文件内容,避免重复定义的问题。
当一个头文件被多次引用时,第一次引用时会执行头文件内容,同时定义 __DEBUG_RUN_TEST_H__
宏;第二次及以后的引用时,由于 __DEBUG_RUN_TEST_H__
宏已经被定义了,因此不会再次执行"testCommom.h
"与"testApi.h
"头文件内容,避免重复定义。
注意:
__DEBUG_RUN_TEST_H__
宏名可以随意命名,只要保证在头文件中唯一即可。常用的做法是将宏名定义为头文件的文件名,加上一个下划线前缀和后缀,如上述示例中的 __DEBUG_RUN_TEST_H__
宏名。这样可以保证宏名唯一,避免与其他头文件的宏名冲突。
总结:
#ifndef
和#endif
指令是 C++ 中用来避免头文件重复包含的常用方式,它们可以保证头文件只被编译一次,避免重复定义的问题,提高代码的可维护性。- 除了避免头文件的重复包含之外,
#ifndef
和#endif
还可以用来实现条件编译,根据不同的条件选择不同的代码执行路径,这也是C++中常用的技巧之一。