GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer cet avertissement :le deuxième paramètre de 'va_start' n'est pas le dernier argument nommé ?

Vous devez utiliser size au lieu de fmt :

va_start(args, size);

Il est size , pas fmt , c'est-à-dire le dernier paramètre qui a un nom explicite (par opposition aux paramètres vararg, qui n'ont pas de nom). Vous devez passer le dernier paramètre nommé à va_start afin qu'il puisse déterminer l'adresse en mémoire à laquelle les paramètres vararg commencent.


second parameter of ‘va_start’ not last named argument

Qu'est-ce que cela signifie et comment le supprimer ?

Votre fonction a des paramètres nommés parent , fmt et size . La spécification C indique que vous devez toujours passer le dernier paramètre nommé à va_start , pour la compatibilité avec les anciens compilateurs. Vous devez donc passer size , pas fmt .

(Mais avec un compilateur moderne, cela pourrait fonctionner quand même)


Je pense qu'il y a une confusion ici:la plupart des gens ne traitent que des fonctions de type prinf qui ont un format et des varargs. et ils pensent qu'ils doivent passer le nom du paramètre qui décrit le format. cependant, va_start n'a rien à voir avec tout type de format de type printf. c'est juste une fonction qui calcule le décalage sur la pile où commencent les paramètres sans nom.


Linux
  1. Comment trier la sortie par taille ?

  2. Comment accéder au dernier argument d'une commande commentée ?

  3. Tout supprimer entre la deuxième et l'avant-dernière occurrence du match ?

  4. Comment obtenir la taille du répertoire sous Linux

  5. Voici comment fonctionne un serveur Linux

Comment supprimer un répertoire sous Linux

Comment utiliser du Command sous Linux

Comment supprimer le référentiel distant Git

Comment trouver la dernière connexion sous Linux

Comment supprimer une connexion de socket CLOSE_WAIT

Comment extraire et/ou supprimer la dernière page d'un tas de PDF ?