包括文件订购策略

Bre*_*ias 12 c++ coding-style include header-files

我已经看到了相当一致的意见,实现文件(的.cc /的.cpp)应包括其对应的类定义文件第一个,包括其他头文件之前.但是当主题转移到头文件本身,以及它们包含的包含顺序时,建议似乎有所不同.

Google编码标准建议:

  1. dir2/foo2.h(首选位置 - 见下面的详细信息).
  2. C系统文件.
  3. C++系统文件.
  4. 其他库的.h文件.
  5. 你的项目的.h文件.

目前尚不清楚上述第1项和第5项之间的差异,以及选择其中一个或另一个地点的原因.也就是说,另一个在线指南建议这个顺序(在该文档的"类布局"部分中找到):

  1. 系统包括
  2. 项目包括
  3. 当地包括

再次出现歧义,这次是第2项和第3项之间的区别.有什么区别?那些代表项目间和项目内部是否包括?

但更重要的是,看起来两个提议的编码标准都建议最后包含"你的"头文件.这些建议与实施文件中包含排序的建议相反,并不直观.将"你的"头文件始终列在第一位 - 在系统和第三方标题之前是否没有意义?

Kar*_*ldt 2

从技术角度来看,您列出的内容的顺序并不重要。如果设计正确,您应该能够按照您想要的任何顺序放置它们,并且它仍然可以工作。例如,如果您foo.h需要<string>,它应该包含在您的内部foo.h,这样您就不必在您使用的任何地方记住该依赖项foo

话虽这么说,如果您确实顺序依赖性,大多数时候将定义文件放在最后即可修复它。这是因为foo.h取决于<string>,但反之则不然。

您可能认为这是将定义文件放在最后的一个很好的例子,但实际上恰恰相反。如果您的编码标准要求首先定义,那么您的编译器更有可能在首次编写时捕获不正确的顺序依赖项。