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