C'est mon avertissement.
Missing sentinel in function call
Comment je peux l'enlever.
J'utilise linux et le compilateur gcc.
C'est mon avertissement.
Missing sentinel in function call
Comment je peux l'enlever.
J'utilise linux et le compilateur gcc.
nil
? Cela n'existe pas en C, il n'y a que NULL. Comment cette réponse peut-elle avoir autant de votes positifs ? Je dois rater quelque chose.
@Mawg stackoverflow.com/a/21076928/895245 est la meilleure réponse, car elle montre le sentinel
qui est le coupable :-)
Je viens de rencontrer le même problème. Le code qui a causé le problème pour moi était...
execl("/bin/bash", "/bin/bash", fname, '\0');
mais ça devrait l'être...
execl("/bin/bash", "/bin/bash", fname, (char *)0);
Le problème de la première version est que la liste des paramètres est censée se terminer par un pointeur nul. Mais ' \0 ' n'est pas un pointeur nul, c'est un caractère nul. Donc la valeur (0) est correcte, c'est juste le type qui est faux.
Le (char *)0 est aussi un zéro, mais il est converti en un char. pointeur qui est un pointeur nul (c'est-à-dire qu'il pointe vers l'adresse 0). Ceci est nécessaire pour que le système puisse savoir où la liste des paramètres se termine et ne continue pas à rechercher des paramètres après le dernier. En faisant cela, il obtiendrait des pointeurs invalides qui pourraient pointer vers n'importe quelle mémoire - ce qui causerait probablement une erreur de segmentation.
Ce (char *)0 est appelé la sentinelle, et c'est ce qui manquait dans le premier exemple.
Enfin, notez que NULL est défini comme (void *)0, donc
execl("/bin/bash", "/bin/bash", fname, NULL);
Il fonctionne tout aussi bien, et est un peu plus pratique. (Merci à @mah pour cela).
J'ai rencontré le même problème il y a quelques minutes. Dans mon cas, mon appel s'était déjà terminé avec 0
mais l'avertissement était là ; quand je l'ai remplacé par NULL
l'avertissement a disparu -- pour la même raison que la vôtre -- le pointeur de coulée qui NULL
a.
Dans Xcode, si vous codifiez en Objective-C et que vous utilisez des méthodes qui prennent une liste de paramètres variables, vous devez ajouter le code suivant néant à la fin de la liste.
Par exemple :
N**SArray names = [NSArray arrayWithObjects : @ "Name1", @ "Name2"] ; * //entraînera l'avertissement mentionné ci-dessus
Cependant, NSArray *names = [NSArray arrayWithObjects : @"Name1", @"Name2", nil] ; //Correct
J'espère que cela vous aidera !
Google est votre ami.
Premier résultat pour "sentinelle manquante dans l'appel de fonction" : http://www.linuxonly.nl/docs/2/2_GCC_4_warnings_about_sentinels.html
Sentinelle signifie garder ou protéger Donc, dans ce contexte, l'erreur se produit parce qu'il se peut que les paramètres de protection soient manquants. Si vous utilisez un tableau ou un dictionnaire, assurez-vous qu'après avoir nommé les objets, vous les terminez par le mot clé nil.
Exemple :
[NSDictionary dictionaryWithObjectsAndKeys:@"UIAlertView", kSectionTitleKey,
@"Show Custom", kLabelKey,
@"AlertsViewController.m - alertOtherAction", kSourceKey];
La déclaration ci-dessus produira une erreur "sentinelle manquante dans l'appel de fonction".
Syntaxe correcte :
[NSDictionary dictionaryWithObjectsAndKeys:@"UIAlertView", kSectionTitleKey,
@"Show Custom", kLabelKey,
@"AlertsViewController.m - alertOtherAction",kSourceKey,nil];
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
12 votes
Pouvez-vous afficher une partie du code ? Vous semblez utiliser une fonction sentinelle et ne pas terminer la liste des arguments par NULL.
10 votes
Difficile à dire sans voir le code que vous essayez de compiler.
2 votes
Erreur de frappe dans mon commentaire précédent, je ne voulais pas dire "fonction sentinelle", mais une fonction qui prend une liste de paramètres et qui utilise une sentinelle pour marquer la fin de la série de données.
0 votes
Google est votre ami. Premier résultat pour "sentinelle manquante dans l'appel de fonction" : linuxonly.nl/docs/2/2_GCC_4_warnings_about_sentinels.html
0 votes
Vous devez accepter l'une des réponses.