08 February 2024

C++ 核心指南目录

“Use a .cpp suffix for code files and .h for interface files”

理由

这是一个用了很久的设计约定。但是,一致性更重要,如果你的项目有其他约定,那么请遵循项目约定。

注意

这个约定也反映了一个使用模式:头文件通常会在 C 和 C++ 中共享。这样,用一样的.h作为头文件的结尾,比不同的结尾,可以更好的进行共享。另一方面,代码实现在 C 和 C++ 之间不太会共享,所以用.c.cpp 把两者区分开来就比较好。

当然,用.h.cpp 两个后缀也不是强制的。只是作为默认选项。还有其他很多选项也有广泛的应用。比如.hh .C .cxx等。用起来没太大差别。在这个文档中,我们选择.h.cpp 作为头文件和实现文件的简称。实际后缀可能会不同。

你用的IDE 可能对于文件后缀有很强的要求:

例子

// foo.h:
extern int a;   // a declaration
extern void foo();

// foo.cpp:
int a;   // a definition
void foo() { ++a; }

foo.h 提供foo.cpp的接口。最好避免全局变量。

坏例子

// foo.h:
int a;   // a definition
void foo() { ++a; }

在程序中添加#include <foo.h>两次,会导致链接错误,因为违反了“单次定义规则”。

强化

  • 标记非约定的文件名
  • 检查是不是遵循.h .cpp 文件命名规则