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>
【问题讨论】:
说“我是约翰·史密斯”和“很高兴认识你”的正确顺序是什么? 见仁见智。我更喜欢第二个版本,因为它不会隐藏丢失的#include
s。
见***.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
成为可重用头文件所必需的,而无需担心#include
d 还必须是什么才能在其他情况下使用#include "A.h"
源文件。
【讨论】:
以上是关于C/C++ 源代码中系统头文件和用户头文件之间的正确顺序是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章