c++ - #include 被忽略

标签 c++ cstring

所以,

我有这段代码,我正在尝试更新。它是为 visual studio 6 编写的,我正试图让它在 visual studio 2010 中编译。

在 stdafx.h 中,它包括 afx.h 和 afxwin.h 以及程序运行所需的一些其他内容。值得注意的是,在其他头文件中使用了 CString。

在 stdafx.h 中包含的顶部,我添加了一条#pragma 消息,以验证它是否首先被编译。头文件的顶部也有一个会引发错误。我可以从编译器输出中看到首先编译了 stdafx.h,这很好。

但是,出现了错误。 (CString 没有被识别为一种类型。)因此,我决定确保它通过所有包含。因此,我在#include 之后添加了另一条#pragma 消息,但该消息并未打印出来。

这是否意味着实际上没有被包括在内?

最佳答案

您的解释有点难以理解,但我认为您遇到了正常编译和预编译 header 之间的差异。

使用预编译头文件,编译器正常处理第一个文件(新项目向导为此设置 stdafx.cpp)。在处理完在预编译控制的项目选项中设置的包含文件(通常是 stdafx.h)后,编译器将其状态保存到 .pch 文件中。

对于所有其他文件,编译器会在不进行任何处理的情况下浏览文件,只查找包含文件。然后它读取.pch 文件,加载保存的状态,并继续正常解析和编译。

此设计的一个结果是,stdafx.cpp 中 #include "stdafx.h" 上方的任何行都成为状态的一部分,并被所有其他文件看到。其他文件中 #include "stdafx.h" 以上的行将被忽略。

关于c++ - #include 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3103968/

相关文章:

C++ : DirectX Texture is Misaligned/Shifted

c++ - 注册到 Linux 的 DeviceManager

c++ - 如何自动将 POD 结构(不使用 .proto 文件)序列化为 Protocol Buffer?

c++ - 减去无符号并得到有符号

C++ 接口(interface)与模板

c - 如何在C中逐字反转句子?

c++ - CString 无效*

c++ - CString 到 char*

c++ - std::string 是如何实现的?

c++ - CString 错误, 'CString' : is not a member of 'ATL::CStringT<BaseType, StringTraits>'