"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Toutes les fonctions variadiques favorisent-elles les arguments « flottants » en « double » ?

Toutes les fonctions variadiques favorisent-elles les arguments « flottants » en « double » ?

Publié le 2024-11-16
Parcourir:804

Do All Variadic Functions Promote `float` Arguments to `double`?

Promotion de l'argument float pour doubler dans les fonctions variables

Dans une discussion précédente, il a été noté que printf() promeut un argument float pour un doublé avant de l'accepter. Cela soulève la question : toutes les fonctions variadiques effectuent-elles cette promotion ?

Promotion des arguments variadiques

Oui, selon les standards C99 et C, les arguments float sont transmis aux fonctions variadiques. les fonctions sont promues en double.

Spécifications standard

  • C99 (section 6.5.2.2) : "les arguments de type float sont promu en double."
  • C (section 5.2.2) : "un type à virgule flottante... est converti en type promu avant l'appel."
  • C (section 4.6) : "Une prvalue de type float peut être convertie en une prvalue de type double. La valeur est inchangée."

cppreference sur la fonction variadique Conversions

cppreference fournit un résumé des conversions par défaut pour les fonctions variadiques en C :

  • std::nullptr_t pour annuler*
  • Arguments flottants pour doubler
  • Promotion d'entiers pour bool, char, short et énumérations

Origine de la promotion

Cette promotion a été introduite en C pour des raisons de compatibilité avec la norme K&R C, malgré ses inconvénients potentiels. Comme l'indique la justification C :

"Pour des raisons de compatibilité avec les pratiques passées, toutes les promotions d'arguments se produisent comme décrit dans K&R en l'absence de déclaration prototype, y compris la promotion pas toujours souhaitable de float pour doubler."

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3