在.pch中使用#define

时间:2010-04-05 22:56:28

标签: c++ precompiled-headers

如果我在预编译的标题中定义了一些内容,如:

#define __BUILD_MAC__

然后在头文件中执行:

#ifdef __BUILD_MAC__
    typedef void*   HINSTANCE;
#endif

这应该有效。但由于某种原因,事实并非如此。我知道,因为当我编译时,我得到关于HINSTANCE的错误,而不是命名类型。

我是否还需要做其他事情才能使这些定义可用?

2 个答案:

答案 0 :(得分:1)

预编译头之前的任何定义都将被忽略。考虑通过编译器级别开关或通过:

进行定义
  

配置属性 - > C / C ++ - >预处理器 - >预处理器定义

You can read more on MSDN

  

当您使用预编译的标头时,   编译器忽略所有预处理器   指令(包括编译指示)   出现在hdrstoppragma之前。该   由此类指定的编译   预处理程序指令必须是   与用于创建的编译相同   预编译的头文件。

至于GCC预编译的标题不同:

  

无法使用预编译的标头   一旦看到第一个C令牌。您   可以有预处理器指令   在预编译头之前;您可以   甚至包括一个预编译的头文件   在另一个标题内,只要   之前没有C代币   #include

答案 1 :(得分:-1)

确保实际用于构建.pch的文件中__BUILD_MAC__#define,并且在.pch中包含最后一个标头之前。