#c #objective-c #cocoa #xcode #ios
#c #objective-c #cocoa #xcode #iOS
Вопрос:
Почему оператор #define в .pch не распознается файлами .mm?
Приводит к «использованию необъявленного идентификатора» и «не объявлено в этой области» при попытке ссылаться на макрос.
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
Комментарии:
1. Не могли бы вы отредактировать свой вопрос и вставить содержимое вашего файла .pch?
2. На первый взгляд, ваш префиксный заголовок выглядит нормально. Однако я бы поместил это
#ifdef DEBUG
внутрь#ifdef __OBJC__
, поскольку вы используетеNSString
. Я предполагаю, чтоdNSLog()
это макрос, который выдает вам ошибки. Можете ли вы проверить выходные данные препроцессора для нарушающего .mm файла и посмотреть, использовался ли заголовок prefix? Кроме того, правильно ли добавлен файл-нарушитель .mm к целевому объекту, использующему ваш заголовок prefix?
Ответ №1:
У меня была та же проблема, очистка не решала ее.
После закрытия и перезапуска Xcode 4 все было в порядке. Если это может кому-то помочь…
Комментарии:
1. Это было именно то решение, которое я нашел.
Ответ №2:
Оказывается, Xcode 4 на самом деле не очищал сборку. 🙁