Maison >développement back-end >C++ >Les fonctions variadiques en C et C favorisent-elles automatiquement les flotteurs en doubles ?

Les fonctions variadiques en C et C favorisent-elles automatiquement les flotteurs en doubles ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-16 04:13:02713parcourir

Do Variadic Functions in C and C   Automatically Promote Floats to Doubles?

Promotion flottante dans les fonctions variadiques

Les fonctions variadiques permettent de transmettre un nombre variable d'arguments de différents types. En C et C , un comportement particulier se produit lorsque l'on tente de transmettre un argument float à une fonction variadique comme printf(). Contrairement à l'intuition, le float est promu en double avant d'être reçu par la fonction.

Les fonctions variadiques favorisent-elles automatiquement les flotteurs ?

Oui, les fonctions variadiques en C et C promeut automatiquement le double des arguments float. Ce comportement est défini dans les normes linguistiques :

C99 (projet):

Arguments that have type float are promoted to double. These are called the default argument promotions.

C (projet):

A floating point type that is subject to the floating point promotion, the value of the argument is converted to the promoted type before the call.

Cette promotion est retenue pour des raisons de compatibilité avec les versions historiques de C. Malgré les inconvénients potentiels, elle reste un comportement par défaut en C99 et C .

Implication pour printf()

Dans le cas de printf(), le phénomène se produit car printf() s'attend à ce que les spécificateurs de format et les arguments correspondent. Étant donné que les spécificateurs de format pour les doubles et les flottants sont différents, l'argument float est promu en double pour répondre aux exigences de la fonction. Cela garantit la compatibilité et simplifie la gestion des arguments à virgule flottante.

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