#include 被忽略

Posted

技术标签:

【中文标题】#include 被忽略【英文标题】:#include being ignored 【发布时间】:2010-06-23 17:24:29 【问题描述】:

所以,

我正在尝试更新此代码。它是为 Visual Studio 6 编写的,我正在尝试让它在 Visual Studio 2010 中编译。

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

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

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

这是否意味着实际上并未包含在内?

【问题讨论】:

CString 在 VS 中 6 次是一个类,后来它变成了一个模板。也许它与此有关?你能在相关代码之前发布确切的编译器错误吗? 贴一些代码sn-ps。 发布了一个答案,其中包含我对 VS 6 之后模板的 CString 更改的初步评论。 【参考方案1】:

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

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

对于所有其他文件,编译器会略过文件而不进行任何处理,只查找包含文件。然后读取.pch文件,加载保存状态,继续正常解析编译。

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

【讨论】:

打败我。我认为您要说的是您正在从 stdafx.h 打印一条消息,并且在编译包含 stdafx.h 的文件时看不到此消息:那是因为它没有再次重新编译 stdafx.h,而是从编译 stdafx.cpp 时开始获取保存的状态。您应该会在 stdafx.cpp 文件中看到该消息。 我现在已经弄清楚了。这是由于自 VS 6 以来 CString 的变化。谢谢。【参考方案2】:

将我的评论传递给答案。

VS 6 中的 CString 是一个类,后来它变成了一个模板。也许这与此有关?

问题与使用有关 typedef 与 CString。发布 VS 6, 那是不可能的。我刚变 手动引用,并编译 现在。

【讨论】:

【参考方案3】:

问题与将 typedef 与 CString 一起使用有关。发布 VS 6,这是不可能的。我只是手动更改了引用,现在可以编译了。

【讨论】:

编辑您的原始帖子不要发布答案......这只是当地的礼仪:)

以上是关于#include 被忽略的主要内容,如果未能解决你的问题,请参考以下文章

void值未如预期地被忽略

"return false" 被忽略不被返回

G ++似乎忽略了#ifdef的#include

Entity Framework Core 忽略 .Include(..) 而没有 .ToList(..) 间接

G++ 忽略 _Pragma 诊断被忽略

Unix C 文件,scanf 忽略空格