【问题标题】:Invalid preprocessing directive mingw无效的预处理指令 mingw
【发布时间】:2014-08-28 19:00:51
【问题描述】:

我下载了 Microsoft DirectX SDK 并尝试使用 MingW 在 Code::Blocks 中打开示例 BasicHLSL,在将文件编码更改为 unicode 并尝试编译后,我收到大量(500 多个)警告,都说“null字符被忽略[默认启用]”和多个错误都说“无效的预处理指令”后跟 # 然后是一个字母。

真正奇怪的是错误似乎与代码行不匹配,例如这里是一个错误

C:\Program Files\Microsoft DirectX SDK (June 2010)\Samples\C++\DXUT\Core\DXUT.h Line 15 error: invalid preprocessing directive #d

现在是 DXUT.h 的第 14-16 行

14#include "dxsdkver.h"

15#if ( _DXSDK_PRODUCT_MAJOR < 9 || _DXSDK_BUILD_MAJOR < 1949 )

16#error The installed DXSDK is out of date.

这是另一个错误

C:\Program Files\Microsoft DirectX SDK (June 2010)\Samples\C++\DXUT\Core\DXUT.h Line 133 error: invalid preprocessing directive #i

这是 DXUT.h 的第 132-134 行

132D3DDEVTYPE DeviceType;

133 D3DFORMAT AdapterFormat;

134DWORD BehaviorFlags;

【问题讨论】:

    标签: c++ gcc compiler-errors mingw codeblocks


    【解决方案1】:

    当您更改文件编码时,我相信您已将其更改为“宽字符”(UTF-16)。这将为每个字符创建一个 16 位的值。大多数 US-ASCII 的宽字符表示的第一个字符为零。这可以解释为什么您的源代码中有很多“零”错误。编译器需要 8 位字符。

    【讨论】:

    • 我只是尝试使用包括 UTF-8 在内的所有可用格式进行编码,所以我认为这不是问题。
    • 如果你打开 dxsdkver.h 它会#define _DXSDK_PRODUCT_MAJOR 吗?该包含文件中可能有一个条件导致它不定义它。那么dxut.h中的#if就会失败
    • 根据我链接的其他错误,我认为这不会起作用,但我会尝试。
    • 该错误表明它是预处理器指令。预处理器指令有'#if'。如果未设置它正在测试的值,则会导致错误。这通常是由通常在 IDE 项目中而不是在源代码中设置的编译时选项引起的。由于您使用的是 mingw 而不是 msvc,因此对我来说似乎是一个合理的怀疑。正如我提到的,您可能还会遇到文本编码问题。在二进制编辑器中打开您的文件并查看。
    猜你喜欢
    • 2012-06-29
    • 2012-03-16
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多