Je dois utiliser ptheat mais je n'ai pas besoin de transmettre aucun argument à la fonction. Par conséquent, je passe null à la fonction sur pthread_create. J'ai 7 pthreads, alors le compilateur GCC me met en garde que j'ai 7 paramètres non remplis. Comment puis-je définir ces 7 paramètres comme inutilisé dans la programmation C? Si je ne définissais pas ces paramètres comme inutilisé, cela causerait-il un problème? Merci d'avance pour les réponses.
void *timer1_function(void * parameter1){ //<statement> } int main(int argc,char *argv[]){ int thread_check1; pthread_t timer1; thread_check1 = pthread_create( &timer1, NULL, timer1_function, NULL); if(thread_check1 !=0){ perror("thread creation failed"); exit(EXIT_FAILURE); } while(1){} return 0; }
5 Réponses :
Vous pouvez lancer le paramètre sur void code> comme ceci:
Stackoverflow.com/a/4851173/168175 a une forme alternative qui fonctionne mieux pour volatile code> apparemment
Il convient parfaitement à l'aide d'un paramètre dans un corps de fonction.
Pour éviter l'avertissement du compilateur (le cas échéant dans votre implémentation), vous pouvez le faire: P>
void *timer1_function(void * parameter1) { // no operation, will likely be optimized out by the compiler parameter1 = parameter1; }
Par défaut, GCC ne produit pas cet avertissement, pas même avec -wall. Je pense que la solution de contournement montrée dans une autre question peut être nécessaire lorsque vous n'avez aucun contrôle sur l'environnement, mais si vous le faites, supprimez simplement le drapeau ( - paramètre-paramètre code>). P>
+1 C'est la meilleure solution. Cet avertissement est fondamentalement idiot. Chaque fois que l'adresse d'une fonction est prise, GCC devrait désactiver les avertissements "paramètres non utilisés", car ils sont utilisés en interne ou non, ils sont utilisés dans le cadre de l'interface requise pour la fonction. Personnellement, je dirais que la même chose devrait s'appliquer à toutes les fonctions externes ...
@R J'ai attrapé un bogue dans mon code il y a quelques jours grâce à cet avertissement. Je faisais un refacteur de certaines fonctions et tapé 0 au lieu de l'identifiant pour un masque de bit qui est entré en tant que paramètre de fonction. Activités -Wextra m'a permis de réparer immédiatement un bogue subtil qui avait été introduit il y a des jours.
-1: Je trouve régulièrement des bogues grâce à cet avertissement étant activé.
Pour le code qui est de nombreuses années et modifié ... Au fil du temps, des arguments sont ajoutés et finissent par être inutilisé plus tard. Cet avertissement peut donc être très utile, surtout quand il devient un problème de passer un argument à une fonction (recherche ou si cela doit être calculé), seulement pour trouver ce n'est même pas utilisé.
GCC dispose d'une installation "attributs" pouvant être utilisée pour marquer des paramètres inutilisés. Utilisez
void *timer1_function(__attribute__((unused))void *parameter1)
Deux techniques couramment utilisées:
1) omettent le nom du paramètre non utilisé: p> 2) commencent le nom du paramètre: P> void *timer1_function(void * /*parameter1*/) { ... }
Je reçois un nom de paramètre omis code> si je le fais (en C11). Assez sûr que cela n'est pas valide pour C (plutôt que C ++).
S'ils sont inutilisés, cela implique qu'aucune opération significative n'est effectuée à ces variables et (pour la plupart), elles sont prudentes de se débarrasser de. C'est un avertissement, pas une erreur, donc il peut être ignoré i>. Ce n'est généralement pas une bonne idée à i> l'ignorer, mais vous peut i>.
@HMJD - C ++ le permet, pas C.
Stackoverflow.com/q/7090998/168175
duplicaté possible de Compilateur universellement moyen de mettre en œuvre un Macro non utilisée en C / C ++
Dupliqué possible de Avertissements de paramètres non utilisés en Code C