web-dev-qa-db-fra.com

Déclaration implicite de fonction - C99

J'utilise actuellement Xcode 4, et dans mon fichier .pch j'ai cette macro: #define localize(s) NSLocalizedString((s), nil).
Lorsque j'essaie d'utiliser cette macro dans un fichier .m, je reçois cet avertissement: Implicit declaration of function 'localize' is invalid in C99.

Ce code se compile sans problème, mais comment puis-je résoudre ce problème pour ne pas recevoir d'avertissement?

33
Misa

J'ai eu ce problème lorsque j'ai fait un remplacement global de NSLog par DLog. J'ai bêtement inclus le

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

déclarations, donc je me suis retrouvé avec

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

qui a provoqué les avertissements et une erreur de l'éditeur de liens.

51
JPsnowytree

Déclarations de fonctions implicites sont celles que le compilateur voit la première fois utilisées comme appel de fonction (par opposition à celles où un prototype ou la définition de fonction est vu en premier).

Apparemment, votre code a utilisé localize(foo) mais la définition de la macro n'était pas visible. Raisons possibles: vous avez oublié de #include le fichier contenant la macro localize ou la précompilation des en-têtes est allé vers le sud et n'a pas inclus la macro localize donc elle n'a pas été développée.

34
Jens

Une autre erreur "idiote" que j'ai rencontrée était le fait que mon DLog était défini dans l'en-tête de préfixe de la cible iOS, j'ai donc dû le copier sur le préfixe de la cible OSX, aussi ...

2
Mazyod

Dans mon cas, un seul fichier donnait cette erreur. Il s'est avéré que je l'ai ajouté à l'appartenance à la cible des tests du projet (dans l'inspecteur de fichiers à droite).

1
Ivan Mir

J'ai eu ce problème parce que j'ai accidentellement importé CocoaLumberjack comme ceci:

#import <CocoaLumberjack/DDLog.h>

Apparemment, l'équipe CocoaLumberjack a un peu plus modulé le code; et les macros comme DDLogError sont désormais définies séparément dans leur propre fichier d'en-tête.

J'ai remplacé l'instruction d'importation par ceci et l'erreur a disparu:

#import <CocoaLumberjack/CocoaLumberjack.h>
1
BastiBen