文件组成
C++工程一般不把所有代码放在同一文件中,而是将其拆分为多个耦合度低的模块,并放在多个.h
-.cpp
文件对下。对于含模板的类和函数,其定义直接置于.h
文件中,取消.cpp
文件。
头文件
头文件如果被多个源文件包含,可能会被重复编译多次,而产生链接错误。为解决此问题,一般采取两个解决办法。
第一,头文件内不放置static
或全局const
以外变量的定义,从而避免符号链接。
第二,利用预处理语句做好头文件保护。
1 | // example_header.hpp |
以上预处理语句在文件起始检测宏EXAMPLE_HEADER_HPP
是否被定义,如果没有被定义则展开头文件开始编译,否则直接跳过头文件的编译过程。这样可以保证即便头文件被重复编译,最终也只会被展开一次。更简单的,现代编译器一般可以用以下语句做到相同目的。
1 |
以上语句置于头文件第一行,可以让编译器只展开头文件一次,效果与宏定义相同。
命名空间保护
为了避免自行定义的函数和类与标准库冲突,建议对于项目中所有函数、类、枚举等成员定义于项目命名空间之内。
1 | namespace project_example |