如果我在预编译的标题中定义了一些内容,如:
#define __BUILD_MAC__
然后在头文件中执行:
#ifdef __BUILD_MAC__
typedef void* HINSTANCE;
#endif
这应该有效。但由于某种原因,事实并非如此。我知道,因为当我编译时,我得到关于HINSTANCE的错误,而不是命名类型。
我是否还需要做其他事情才能使这些定义可用?
答案 0 :(得分:1)
预编译头之前的任何定义都将被忽略。考虑通过编译器级别开关或通过:
进行定义配置属性 - > C / C ++ - >预处理器 - >预处理器定义
当您使用预编译的标头时, 编译器忽略所有预处理器 指令(包括编译指示) 出现在hdrstoppragma之前。该 由此类指定的编译 预处理程序指令必须是 与用于创建的编译相同 预编译的头文件。
至于GCC预编译的标题不同:
无法使用预编译的标头 一旦看到第一个C令牌。您 可以有预处理器指令 在预编译头之前;您可以 甚至包括一个预编译的头文件 在另一个标题内,只要 之前没有C代币
#include
。
答案 1 :(得分:-1)
确保实际用于构建.pch的文件中__BUILD_MAC__
为#define
,并且在.pch中包含最后一个标头之前。