Variadische Funktionsförderung von Float-Argumenten zur Verdopplung in printf()
In C und C ist die Funktion printf() eine variadische Funktion das erfordert eine variable Anzahl von Argumenten. Ein besonderes Verhalten von printf() besteht darin, dass ein übergebenes Float-Argument in ein Double konvertiert wird, bevor die Funktion es empfängt. Dies wirft die Frage auf: Fördern alle Variadic-Funktionen Float-Argumente in Double?
Antwort:
Ja, Variadic-Funktionen in C und C fördern Float-Argumente in Double.
Begründung:
Dieses Verhalten ist sowohl in der C99- und C-Standards. Der Entwurf des C99-Standards legt fest, dass „Argumente vom Typ float zu double heraufgestuft werden“ für variadische Funktionen. In ähnlicher Weise besagt der C-Standard, dass „bei einem Gleitkommatyp, der der Gleitkomma-Heraufstufung unterliegt, der Wert des Arguments vor dem Aufruf in den heraufgestuften Typ konvertiert wird.“
Der Grund für diese Heraufstufung ist: Behalten Sie die Kompatibilität mit dem K&R-C-Standard bei, der erforderte, dass Float-Argumente in Abwesenheit einer Prototypdeklaration auf „double“ heraufgestuft werden mussten. Obwohl diese Kompatibilität nicht immer wünschenswert ist, wurde sie aus Gründen der Abwärtskompatibilität beibehalten.
Das obige ist der detaillierte Inhalt vonErhöhen alle variadischen Funktionen Float-Argumente auf Double?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!