web-dev-qa-db-fra.com

Avertissement "Pas de prototype précédent pour la fonction"

j'utilise shareKit pour me programme.

mais dans le FBConnectGlobal, il y a quelques avertissements,

NSMutableArray* FBCreateNonRetainingArray() {
  CFArrayCallBacks callbacks = kCFTypeArrayCallBacks;
  callbacks.retain = RetainNoOp;
  callbacks.release = ReleaseNoOp;
  return (NSMutableArray*)CFArrayCreateMutable(nil, 0, &callbacks);
}

comme cette méthode, il avertit: "Aucun prototype précédent pour la fonction FBCreateNonRetainingArray"

45
Wang Yanchao

Pour clarifier la réponse d'Eric Dchao ci-dessus, quelqu'un sur Facebook n'a apparemment pas mis de "statique" devant ce BOOL?

Quoi qu'il en soit, changer de

BOOL FBIsDeviceIPad() {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    return YES;
  }
#endif
  return NO;
}

pour ça

static BOOL FBIsDeviceIPad() {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    return YES;
  }
#endif
  return NO;
}

réparé pour moi.

49
Derek Bredensteiner

Selon la norme c, déclarer le prototype comme

NSMutableArray* FBCreateNonRetainingArray(void);
//      --------------->                  ^^^^   
// Yes, with the void as the parameter

résout le problème.

62
daveswen

[~ # ~] mise à jour [~ # ~] : désactiver les avertissements n'est pas une bonne solution, consultez la réponse de @Derek Bredensteiner.

Dans Xcode 4, accédez aux paramètres de construction de votre projet. Recherchez "prototype". Il devrait y avoir une option appelée "Prototypes de fonction manquants"; le désactiver.

via ici

28
fannheyward

Est-ce une fonction globale? Ajoutez "statique" s'il n'est utilisé que dans le fichier courant.

La raison possible est la suivante:

pas de prototype précédent pour `foo '

Cela signifie que GCC a trouvé une définition de fonction globale sans voir de prototype pour la fonction. Si une fonction est utilisée dans plusieurs fichiers, il devrait y avoir un prototype pour elle dans un fichier d'en-tête quelque part. Cela empêche les fonctions et leurs utilisations de se désynchroniser

Si la fonction n'est utilisée que dans ce fichier, rendez-la statique pour garantir qu'elle ne sera jamais utilisée en dehors de ce fichier et documentez qu'il s'agit d'une fonction locale

7
basicthinker