C++:当顺序真正重要时,如何保证在项目中包含头文件的顺序

C++: How to guarantee include order of header files in a project when the order really matters

本文关键字:顺序 项目 何保证 包含头 文件 C++      更新时间:2023-10-16

提出这个问题是因为在某些情况下,包含顺序真的很重要。例如,正如 LearnOpenGL 或 GLFW 文档所述,glad.h必须在glfw3.h之前包含在 .

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

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

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

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

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

我通常使用#pragma once作为包含保护。

比 #ifdef 的更不容易出错,但它有点不标准。

https://en.wikipedia.org/wiki/Pragma_once

另一种选择——也许是"选项 3"——是将这些头文件包含在"预编译头文件"中。 如果您预计头文件本身很少(如果有的话(更改,这将特别有用。