CppCoreGuidelines SF.5 一个 .cpp 文件必须包含为其定义了接口的头文件
12 November 2023
“A .cpp file must include the header file(s) that defines its interface”
理由
这样做就允许编译器进行早起的一致性检查。
坏例子
// foo.h: void foo(int); int bar(long); int foobar(int); // foo.cpp: void foo(int) { /* ... */ } int bar(double) { /* ... */ } double foobar(int);
在早起捕捉不到错误,只有在链接时,一个程序调用了 bar
或 foobar
的时候才会报错。
例子
// foo.h: void foo(int); int bar(long); int foobar(int); // foo.cpp: #include "foo.h" void foo(int) { /* ... */ } int bar(double) { /* ... */ } double foobar(int); // error: wrong return type
现在, foobar
的返回值错误在编译的时候就能立即捕捉到。但是 bar
的参数类型错误还不能马上捕捉到,因为有可能存在重载,但是链接时还是会捕获到的。不管怎么样,系统化的使用 .h
文件可以尽量提前捕捉到错误。