C/C++ 源代码中系统头文件和用户头文件之间的正确顺序是啥? [复制]

Posted

技术标签:

【中文标题】C/C++ 源代码中系统头文件和用户头文件之间的正确顺序是啥? [复制]【英文标题】:what's the right order between system header and user header file in C/C++ source? [duplicate]C/C++ 源代码中系统头文件和用户头文件之间的正确顺序是什么? [复制] 【发布时间】:2015-12-23 08:23:23 【问题描述】:

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

A,系统头继续

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

B,用户标题继续

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

【问题讨论】:

说“我是约翰·史密斯”和“很高兴认识你”的正确顺序是什么? 见仁见智。我更喜欢第二个版本,因为它不会隐藏丢失的#includes。 见***.com/questions/2762568/… @immibis 正确的方式是先说“我是约翰·史密斯”,然后说“很高兴认识你”。 【参考方案1】:

正确编写的用户标头应该包含他们需要的任何标头,因为标头的用户不必事先知道需要包含哪些标头。这是遵循封装原则的。

出于同样的原因,应保护正确编写的用户标头免受多次包含。假设主程序包含 A 和 B,并且 A 包含 C,那么应该可以修改 B,使其也包含 C,而无需更改任何其他文件。

使用正确编写的用户标头,包含的顺序无关紧要。这纯粹是一个偏好问题。我个人喜欢把系统头文件放在第一位,库头文件放在第二位,用户头文件放在第三位,但你可以做你想做的事。

【讨论】:

【参考方案2】:

说到头文件,我只记得第一种方法。

当涉及到源文件时,我使用相同的方法,除非有与源文件对应的头文件。在这种情况下,我先#include特定的头文件。

假设我有 A.h 声明了一个类或一些函数,而 A.cc 实现了它们。在这种情况下,我使用:

交流:

#include "A.h"

// Standard includes

// User includes

这对于清除任何缺失的前向声明或标准包含文件很有用,这些文件是使A.h 成为可重用头文件所必需的,而无需担心#included 还必须是什么才能在其他情况下使用#include "A.h"源文件。

【讨论】:

以上是关于C/C++ 源代码中系统头文件和用户头文件之间的正确顺序是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

文件路径的正斜杠(/)与反斜杠()

文件路径的正斜杠(/)与反斜杠()

C/C++补充材料·头文件与代码文件与inline

Ubuntu和OS-X之间的头文件兼容性

vs code写C代码,结构成员不会自动提示,要怎么设置吗?

浅谈c/c++头文件中#ifndef/#define/#endif的用法