我知道这对项目没有什么影响,但是,假设您使用#defined标头保护C++代码,您使用什么格式?例如假设一个标题foo.hpp
:
#ifndef __FOO_HPP__ ... #ifndef INCLUDED_FOO_HPP ... #ifndef SOME_OTHER_FORMAT
我卖的是关于大写#defines的想法,但不能解决这些守卫的格式.
我总是在include guard中包含命名空间或相对路径,因为只有头名称才被证明是危险的.
例如,您有一些大型项目,其中包含代码中的两个文件
/myproject/module1/misc.h /myproject/module2/misc.h
因此,如果您为包含保护使用一致的命名方案,则可能最终会_MISC_HPP__
在两个文件中定义(非常有趣,以找到此类错误).
所以我安顿下来
MYPROJECT_MODULE1_MISC_H_ MYPROJECT_MODULE2_MISC_H_
这些名称相当长,但与双重定义的痛苦相比,这是值得的.
另一种选择,如果你不需要编译器/平台独立性,你可能会寻找一些#pragma once stuff.
我总是用 INCLUDED_FOO_HPP
我不会使用双下划线,因为保留了双下划线.
为了真正避免名称冲突,我使用GUID:
#ifndef GUARD_8D419A5B_4AC2_4C34_B16E_2E5199F262ED
就个人而言,我只使用文件名FOO_HPP.Google使用整个路径,如SRC_ENGINE_FAST_HPP.
某些名称和函数签名集始终保留给实现:
每个包含双下划线(_ _)或以下划线后跟大写字母(2.11)开头的名称都保留给实现以供任何使用.
以下划线开头的每个名称都保留给实现,以用作全局名称空间中的名称.
(17.4.3.1.2/1
)