Ответ 1
У меня была эта проблема, когда я сделал глобальную замену NSLog на DLog. Я безрассудно включил
#define DLog(...) NSLog(...
поэтому я закончил с
#define DLog(...) DLog(...
который вызвал предупреждения и ошибку компоновщика.
В настоящее время я использую Xcode 4, а в моем .pch файле у меня есть этот макрос:
#define localize(s) NSLocalizedString((s), nil)
.
Когда я пытаюсь использовать этот макрос в каком-либо файле .m, я получаю это предупреждение: Implicit declaration of function 'localize' is invalid in C99
.
Этот код компилируется без проблем, но как я могу это исправить, поэтому я не получаю предупреждение?
У меня была эта проблема, когда я сделал глобальную замену NSLog на DLog. Я безрассудно включил
#define DLog(...) NSLog(...
поэтому я закончил с
#define DLog(...) DLog(...
который вызвал предупреждения и ошибку компоновщика.
Неявные объявления функций - это те, которые компилятор видит в первый раз как вызов функции (в отличие от тех, где первый образец или определение функции).
По-видимому, ваш код использовал localize(foo)
, но определение макроса не было видно. Возможные причины: вы забыли #include
файл, содержащий макрос локализации, или предварительную компиляцию заголовков, отправленных на юг, и не включили макрос localize
, поэтому он остался нерасширенным.
Другая "глупая" ошибка, с которой я столкнулся, заключалась в том, что мой DLog был определен в заголовке префикса iOS-мишени, поэтому мне пришлось скопировать его и в префикс целевой OSX...
У меня была эта проблема, потому что я случайно импортировал CocoaLumberjack следующим образом:
#import <CocoaLumberjack/DDLog.h>
По-видимому, команда CocoaLumberjack еще раз расширила код; и макросы типа DDLogError
теперь определяются отдельно в собственном файле заголовка.
Я заменил оператор import этим, и ошибка исчезла:
#import <CocoaLumberjack/CocoaLumberjack.h>
В моем случае только один файл выдавал эту ошибку. Оказалось, что я добавил его к целевому членству в тестировании проектов (в Файловом инспекторе справа).