2011-07-15 28 views
32

Actualmente estoy usando Xcode 4, y en mi archivo .pch tengo esta macro: #define localize(s) NSLocalizedString((s), nil).
Cuando intento utilizar esta macro en algún archivo .m, recibo esta advertencia: Implicit declaration of function 'localize' is invalid in C99.Declaración implícita de función - C99

Este código se compila sin problemas, pero ¿cómo puedo solucionarlo para no recibir una advertencia?

+0

No pude reproducir el problema, compila y funciona perfectamente, sin advertencias. – Lio

+0

Parece que fue un error en XCode ... 4.0.2 Creo. 4.2 betas funcionan bien. – Misa

Respuesta

34

Las declaraciones de funciones implícitas son aquellas que el compilador ve por primera vez como una llamada a función (en oposición a aquellas donde se ve primero un prototipo o la definición de función).

Aparentemente su código usaba localize(foo) pero la definición de la macro no era visible. Posibles razones: se olvidó de #include el archivo que contiene la macro de localización o la precompilación de los encabezados se dirigió hacia el sur y no incluyó la macro localize por lo que no se expandió.

+3

Pero eso indicaría un error en Xcode, si la macro se definió en el encabezado de prefijo del proyecto, porque ese encabezado debe precompilarse y estar disponible para todas las unidades de compilación (por ejemplo, cada archivo .m del proyecto). FWIW Todavía veo este error de vez en cuando en Xcode 4.4.1, pero lo dejé y relancé Xcode. – Mason

+2

Probablemente podría archivarse en "precompilación de encabezados hacia el sur". Con errores en las herramientas, cualquier cosa puede suceder. – Jens

+0

He visto esto en Xcode 5. La forma más segura de deshacerse del mensaje de advertencia es simplemente incluir el archivo de encabezado relevante dentro del archivo que muestra el error. – JaredH

50

Tuve este problema cuando hice un reemplazo global de NSLog con DLog. Me tontos incluido los

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

declaraciones, por lo que terminó con

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

que causó las advertencias, y un error de enlace.

2

Otro error "tonto" que me encontré fue el hecho de que mi DLog estaba definido en el encabezado prefijo del destino iOS, así que tuve que copiarlo al prefijo del objetivo OSX, así ...

1

tuve este problema, ya que accidentalmente importado CocoaLumberjack así:

#import <CocoaLumberjack/DDLog.h> 

al parecer, el equipo de CocoaLumberjack modularizado el código un poco más; y macros como DDLogError ahora se definen por separado en su propio archivo de encabezado.

que sustituyó a la declaración de importación con esto y el error se fue:

#import <CocoaLumberjack/CocoaLumberjack.h> 
1

En mi caso sólo un archivo estaba dando este error. Resultó que lo agregué a la membresía objetivo de las pruebas del proyecto (en el Inspector de archivos a la derecha).

Cuestiones relacionadas