Maison  >  Article  >  développement back-end  >  Toutes les fonctions variadiques favorisent-elles les arguments « flottants » en « double » ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-11-23 06:21:16681parcourir

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

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

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 passés à variadique les fonctions sont promues au double.

Standard Spécifications

  • C99 (section 6.5.2.2) : "les arguments de type float sont promus en double."
  • C ( section 5.2.2) : "un type à virgule flottante... est converti en type promu avant le call."
  • C (section 4.6) : "Une prvalue de type float peut être convertie en une prvalue de type double."

cppreference sur les conversions de fonctions variadiques

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

  • std::nullptr_t pour annuler*
  • Arguments flottants pour doubler
  • Promotion entière pour bool, char, short et énumérations

Origine de Promotion

Cette promotion a été introduite en C pour des raisons de compatibilité avec le standard 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."

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn