Неявное объявление функции - C99 - PullRequest
33 голосов
/ 15 июля 2011

В настоящее время я использую Xcode 4, и в моем файле .pch у меня есть этот макрос: #define localize(s) NSLocalizedString((s), nil).
Когда я пытаюсь использовать этот макрос в каком-то файле .m, я получаю это предупреждение: Implicit declaration of function 'localize' is invalid in C99.

Этот код компилируется без проблем, но как я могу это исправить, чтобы я не получил предупреждение?

Ответы [ 5 ]

51 голосов
/ 12 декабря 2012

У меня была эта проблема, когда я сделал глобальную замену NSLog на DLog. Я по глупости включил

#define DLog(...) NSLog(...

заявления, поэтому я в итоге получил

#define DLog(...) DLog(...

, которая вызвала предупреждения, и ошибка компоновщика.

34 голосов
/ 25 августа 2011

Неявные объявления функций - это те, которые компилятор видит впервые, когда используется как вызов функции (в отличие от тех, где прототип или определение функции видны первыми).

Видимо, ваш код использовал localize(foo), но определение макроса не было видно. Возможные причины: вы забыли #include файл, содержащий макрос localize, или прекомпиляция заголовков пошла на юг и не включала макрос localize, поэтому он остался нерасширенным.

2 голосов
/ 28 июля 2013

Другая «глупая» ошибка, с которой я столкнулся, заключалась в том, что мой DLog был определен в заголовке префикса цели iOS, поэтому мне пришлось также скопировать его в префикс цели OSX ...

1 голос
/ 29 января 2017

В моем случае только один файл выдавал эту ошибку. Оказалось, что я добавил его в целевое членство тестов проекта (в File Inspector справа).

1 голос
/ 16 октября 2014

У меня была эта проблема, потому что я случайно импортировал CocoaLumberjack следующим образом:

#import <CocoaLumberjack/DDLog.h>

Судя по всему, команда CocoaLumberjack еще немного модифицировала код; и макросы типа DDLogError теперь определяются отдельно в своем заголовочном файле.

Я заменил оператор импорта этим, и ошибка исчезла:

#import <CocoaLumberjack/CocoaLumberjack.h>
...