Heraufstufung von Float-Argumenten zu Double in printf()
In einer früheren Diskussion wurde darauf hingewiesen, dass, wenn ein Float an printf übergeben wird () wird auf double heraufgestuft, bevor es von der Funktion verwendet wird. Dieses Verhalten ist nicht spezifisch für printf(), sondern für alle variadischen Funktionen.
Ohne eine Prototypdeklaration erfolgen alle Argumentheraufstufungen in C und C wie im K&R-C-Standard definiert. Dazu gehört die Heraufstufung von Float-Argumenten in das Double-Format, auch wenn dies nicht erwünscht ist.
Variadic Function Argument Promotion
Gemäß dem C99-Standard (Abschnitt 6.5.2.2) Argumente vom Typ float werden auf double heraufgestuft, bevor sie an variadische Funktionen übergeben werden. In ähnlicher Weise besagt der C-Standard (Abschnitt 5.2.2), dass Gleitkommaargumente vor dem Funktionsaufruf in den heraufgestuften Typ (double) konvertiert werden.
cppreference bietet einen klaren Überblick über die Standardkonvertierungen für variadische Funktionen in C , einschließlich der Konvertierung von Float-Argumenten in Double.
Kompatibilität mit K&R C
Die Heraufstufung von Float-Argumenten in Double in variadic Funktionen wurde in C und C aus Kompatibilitätsgründen beibehalten mit dem originalen K&R C-Standard. Trotz Bedenken hinsichtlich möglicher Datenverluste bleibt diese Konvertierung aus Gründen der Abwärtskompatibilität bestehen.
Das obige ist der detaillierte Inhalt vonWarum werden Float-Argumente in printf() und anderen variadischen Funktionen auf Double heraufgestuft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!