.mm 文件中无法识别的预编译头文件中的#define

Posted

技术标签:

【中文标题】.mm 文件中无法识别的预编译头文件中的#define【英文标题】:#define in precompiled header not recognized in .mm files 【发布时间】:2011-04-15 23:36:22 【问题描述】:

为什么 .mm 文件无法识别 .pch 中的 #define 语句?

尝试引用宏时导致“使用未声明的标识符”和“未在此范围内声明”。

Pch 看起来像这样:

#import <Availability.h>

#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif

#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif

#ifdef DEBUG
#define dNSLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#else
#define dNSLog(format, ...)
#endif

【问题讨论】:

你能编辑你的问题并粘贴你的 .pch 文件的内容吗? 乍一看,您的前缀标题看起来不错。不过,我会将 #ifdef DEBUG 放在 #ifdef __OBJC__ 中,因为您使用的是 NSString。我假设dNSLog() 是给你错误的宏。您是否能够检查有问题的 .mm 文件的预处理器输出并查看是否使用了前缀标头?此外,有问题的 .mm 文件是否正确添加到使用您的前缀标头的目标中? 【参考方案1】:

我也遇到了同样的问题,打扫也没解决。

关闭并重新启动 Xcode 4 后一切正常。 如果这可以帮助某人...

【讨论】:

这正是我找到的解决方案。【参考方案2】:

事实证明 Xcode 4 实际上并没有清理构建。 :(

【讨论】:

以上是关于.mm 文件中无法识别的预编译头文件中的#define的主要内容,如果未能解决你的问题,请参考以下文章

无法为本地pod框架桥接标头发出预编译头

C++预编译头文件stdafx.h作用

GCC 和预编译头文件

C : Visual Studio 和 Eclipse+MinGW 中的预编译头文件

浅谈VC++中预编译的头文件放那里的问题分析

重建预编译头文件