包含头文件时要按一定的顺序吗?为什么?

thorkhan 2003-05-30 11:52:02
我现在写一个关于Directshow的的组件提供给VB调用,我在程序里包含了下面四个头文件,

#include "stdafx.h"
#include "GpCapture.h"
#include <streams.h> // Active Movie (includes windows.h)
#include <initguid.h> // declares DEFINE_GUID to declare an EXTERN_C const.

按照这样的顺序编译通过,但是把顺序打乱之后如下

#include <initguid.h> // declares DEFINE_GUID to declare an EXTERN_C #include <streams.h> // Active Movie (includes windows.h)
#include "stdafx.h"
#include "GpCapture.h"

编译时出了老多的错误,为什么?
...全文
59 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nabie 2003-05-30
某些头文件有相互依赖关系,比如 a.h 中用到的标识符或数据类型在 b.h 中定义,那么 b.h 就必须出现在 a.h 的前面,这个顺序不一定是你看到的顺序,而是当编译器把所有 #include 指令展开后把所有头文件放到 .c 或 .cpp 里的顺序。

另外 stdafx.h 必须放在第一位,主要原因是这个头文件与 stdafx.cpp 配合生成一个预编译的头文件供其他文件使用以提高编译的速度,因此编译器也会先编译这个 stdafx.cpp 文件。把 stdafx.h 放在第一位告诉编译器这个头文件前的所有代码都已经预编译了。SDK 和 MFC 的头文件被放在 stdafx.h 里,因为这些头文件一般不会改动且编译时需要耗费预处理器太多的时间。
回复
triggerd 2003-05-30
和编译器有关吧,重新编译时,你会发现总是先compliling stdafx.cpp,在它成功编译的基础上才会编译其他文件,打乱顺序,可能找不到stdafx.h..
回复
rivershan 2003-05-30
#include "stdafx.h"
第一位的!
回复
winthegame 2003-05-30
需要按顺序来。最简单的例子就是:

stdafx.h
里面
struct mmm
{
int a;
};

然后 hello.h 里面的定义
mmm oo;

最后在 #include ,不按顺序来 会提示 mmm根本没定义!
回复
newkey007 2003-05-30
#include <initguid.h> // declares DEFINE_GUID to declare an EXTERN_C #include <streams.h> // Active Movie (includes windows.h)
包含 #include "GpCapture.h" 定义的结构等东西



回复
3jaja 2003-05-30
#include "stdafx.h"中有#include <windows.h>
放在第一。
回复
alfwolf 2003-05-30
是的#include "stdafx.h"应该放在最前面,其他的可以顺序自定
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-05-30 11:52
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……