头文件卫士通过#ifndef、#define和#endif确保头文件内容只被编译一次,防止重复包含导致的重复定义错误。

头文件卫士(Header Guard)是c++中一种防止头文件被重复包含的预处理机制。当一个头文件被多个源文件或嵌套包含时,有可能被多次引入同一个头文件,导致重复定义错误。头文件卫士通过条件编译指令确保头文件的内容只被编译一次。
头文件卫士的基本写法
使用#ifndef、#define和HEADER_NAME_H未定义,则继续下面的内容。
- 全大写,用下划线分隔,包含项目名或路径信息。
- 例如:MYPROJECT_MATH_UTILS_H 或 VECTOR_H。
现代替代方案:#pragma once
许多现代编译器支持更简洁的方式:
#pragma once
作用与头文件卫士相同,但更直观且不易出错。不过它不是C++标准的一部分(尽管广泛支持),在跨平台或严格标准要求的项目中,传统宏卫士仍更稳妥。
基本上就这些。头文件卫士虽简单,却是C++项目组织中不可或缺的基础技巧,能有效避免重复定义带来的编译错误。