C/C++ 源代码中系统头文件和用户头文件之间的正确顺序是什么?

what's the right order between system header and user header file in C/C++ source?

以下示例之间的正确顺序是什么:

A​​、系统头继续

    #include <stdio.h>
    #include "user-define.h"

B,用户头继续

    #include "user-define.h"
    #include <stdio.h>

关于头文件,我只记得使用第一种方法。

对于源文件,除非有与源文件对应的头文件,否则我使用相同的方法。在这种情况下,我首先 #include 特定的头文件。

假设我有 A.h 声明了 class 或一些函数并且 A.cc 实现了它们。在那种情况下,我使用:

A.c:

#include "A.h"

// Standard includes

// User includes

这有助于清除任何缺少的前向声明或标准包含文件,这些文件是使 A.h 成为可重用头文件所必需的,而不必担心必须 #included 才能在其他源文件中使用 #include "A.h"

正确编写的用户 headers 应该包括他们需要的任何 headers,因为 header 的用户不必知道哪些 headers 需要预先包括在内。这是遵循封装的原则。

出于同样的原因,应该保护正确编写的用户 headers 免受多重包含。想象一下,主程序包括A和B,A包括C,那么应该可以修改B,使其也包括C,而无需更改任何其他文件。

有了正确编写的用户 header,包含的顺序并不重要。这纯粹是一个偏好问题。我个人喜欢将系统 header 放在第一位,将库 header 放在第二位,将用户 header 放在第三位,但您可以随心所欲。