Heim >Backend-Entwicklung >C++ >Erhöhen variadische Funktionen in C und C Floats automatisch zu Doubles?

Erhöhen variadische Funktionen in C und C Floats automatisch zu Doubles?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-16 04:13:02714Durchsuche

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

Float-Promotion in variadischen Funktionen

Variadische Funktionen ermöglichen die Übergabe einer variablen Anzahl von Argumenten unterschiedlichen Typs. In C und C tritt ein eigenartiges Verhalten auf, wenn versucht wird, ein Float-Argument an eine variable Funktion wie printf() zu übergeben. Entgegen der Intuition wird der Float zu einem Double heraufgestuft, bevor er von der Funktion empfangen wird.

Werden variadische Funktionen Floats automatisch heraufgestuft?

Ja, variadische Funktionen in C und C erhöhen Float-Argumente automatisch auf double. Dieses Verhalten ist in den Sprachstandards definiert:

C99 (Entwurf):

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

C (Entwurf):

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.

Diese Aktion wird aus Kompatibilitätsgründen mit historischen Versionen von C beibehalten. Trotz der möglichen Nachteile bleibt es ein Standardverhalten in C99 und C .

Implikation für printf()

Im Fall von printf() tritt das Phänomen auf, weil printf() erwartet, dass Formatspezifizierer und Argumente übereinstimmen. Da die Formatspezifizierer für Doubles und Floats unterschiedlich sind, wird das Float-Argument zu einem Double heraufgestuft, um die Anforderungen der Funktion zu erfüllen. Dies stellt die Kompatibilität sicher und vereinfacht die Handhabung von Gleitkommaargumenten.

Das obige ist der detaillierte Inhalt vonErhöhen variadische Funktionen in C und C Floats automatisch zu Doubles?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn