#include的顺序以避免链接错误

时间:2012-01-26 15:59:02

标签: c++ include

有时在C ++中,包含事项的顺序。这就是openGL使用的情况:

1.-正确方式:

#include <windows.h>                // Header File For Windows
#include <gl\glu.h>                 // Header File For The GLu32 Library

2.-错误的方式:

#include <gl\glu.h>                 // Header File For The GLu32 Library
#include <windows.h>                // Header File For Windows
  

这是仅针对某些特定标头发生的还是它的类型   随机问题难以预防先验?

如果是这种情况:

  

我如何知道包含的正确顺序?

4 个答案:

答案 0 :(得分:4)

  1. 只是一些特定的标题。有人可能称之为设计缺陷。
  2. 你不能。查看您收到的错误消息并仔细排序。在Windows上,首先放置windows.h可能是一个好主意。

答案 1 :(得分:2)

顺序与C ++标准库包含无关 对于其他图书馆,它通常不重要(除非他们特别说明) 对于特定的平台,它可能很重要,并且通常会明确指定。

例如:

在Windows上#include <windows.h>出现在所有其他包含之前。

另外,
#include <stdafx.h>
如果您正在使用预编译头文件,则需要在其他所有内容之前包含MSVC ++特定标头。

答案 2 :(得分:2)

对于Windows,您首先需要#include <windows.h>

然后在头文件中避免#include - 更喜欢前向声明。

只需更改一个头文件即可节省更少的编译。

答案 3 :(得分:2)

有一段时间,相当多的知名C程序员建议没有标题应该包含任何其他标题 - 应该由用户按正确的顺序包含正确的标题以使其工作。这对于不涉及太多标题的小项目来说非常有效(并且继续有效)。

但是,对于较大的项目,跟踪所有标头依赖关系可能/确实变得非常困难,以至于它在许多现代代码库中几乎无法管理。大多数现代标题本身都包含它们所依赖的任何其他标题。

不幸的是,这意味着我们经常最终混淆了两者。除了在它出现时处理它,通过找到你需要包含哪些标题以及按什么顺序,你所能做的事情并不多。