Heim >Backend-Entwicklung >C++ >Erhöhen variadische Funktionen in C und C Floats automatisch zu 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!