首页 > 解决方案 > C++:当顺序真的很重要时,如何保证在项目中包含头文件的顺序

问题描述

之所以提出这个问题,是因为在某些情况下,包含顺序确实很重要。例如,如LearnOpenGLGLFW 文档中所述, glad.h必须在glfw3.h.

对于包含标头,我一直遵循每个文件应仅显式包含其必要标头的规则,并且标头都应具有包含保护。

于是问题就来了。在一个项目中,有些文件只需要glfw3.h,有些只需要glad.h. 那么在编译的时候,如何保证编译器总是glad.h先读glfw3.h呢?

我能想到的两个解决方案是:

  1. 在将源文件提供给编译器时手动排列源文件的顺序。
  2. 编写一个名为的新头文件glad_glfw.h,其中包含按正确顺序的两个头文件。然后任何其他需要包含两者中的任何一个的文件都包括glad_glfw.h.

我认为 1. 当项目变大时最终会很困难,并且 2. 有点违反最小包含规则。所以我想问是否有更好的方法来做到这一点?

标签: c++glfw

解决方案


还有一个选项——“选项 3”,也许是——将这些头文件包含在“预编译头文件”中。如果您希望头文件本身很少(如果有的话)更改,这将特别有用。


推荐阅读