- 在
module.h
中运用 #if!defined
:
// module.h
#ifndef MODULE_H // 如果没有定义 MODULE_H
#define MODULE_H
// 这里写模块的声明,例如函数声明、结构体定义等
void moduleFunction();
#endif // MODULE_H
main.cpp
和 module.cpp
中包含 module.h
:
// main.cpp
#include "module.h"
int main() {
moduleFunction();
return 0;
}
// module.cpp
#include "module.h"
#include <iostream>
void moduleFunction() {
std::cout << "This is a function from module." << std::endl;
}
- 原理解释:
#ifndef
是 “if not defined” 的缩写,意思是如果某个宏没有被定义。在上述例子中,#ifndef MODULE_H
检查是否定义了 MODULE_H
这个宏。
- 如果没有定义
MODULE_H
,就执行 #define MODULE_H
,定义这个宏,同时会执行 #ifndef
和 #endif
之间的代码,也就是模块的声明部分。
- 如果再次包含
module.h
,由于 MODULE_H
已经被定义,#ifndef MODULE_H
条件不成立,#ifndef
和 #endif
之间的代码就不会再次执行,从而避免了头文件内容的重复包含。这样可以防止重复定义函数、结构体等内容,避免编译错误。