17 November 2023

C++ 核心指南目录

“Use #include guards for all header files”

理由

避免头文件被包含了多次。为了避免头文件包含保护本身的冲突,不要仅仅按照头文件名来命名包含保护宏。最好包含一个关键字和可区分的名字。比如代码库或组件的名字。

例子

// file foobar.h:
#ifndef LIBRARY_FOOBAR_H
#define LIBRARY_FOOBAR_H
// ... declarations ...
#endif // LIBRARY_FOOBAR_H

强化

标记没有 #include 包含保护的 .h 头文件。

注意

有些语言的实现通过像 @pragma once 这种方式来进行包含保护。但是,这种方式不是标准定义的,缺少移植性。它是在你的程序中注入主机文件系统语义信息来实现的。用这种方式,也会让你的程序锁定在特定语言实现厂商。我们还是建议按照 ISO C++ 进行开发。请查看规则:P.2