Ich sehe insgesamt 4 Typkonvertierungen (von denen keine „Aktionen“).
Innen f()
, wird der Wert von x
ausdrücklich von int
zu float
durch den Cast-Operator umgewandelt, Das Ergebnis dieser Umwandlung implizit von float
zu int
durch die return
Anweisung umgewandelt wird.
Innen main()
, der Wert der Konstanten 5L
wird implizit von long int
zu int
umgewandelt, wenn es als ein Argument an f
übergeben wird. Das Ergebnis des Aufrufs zu f
wird implizit von int
zu float
durch die Initialisierung von x
umgewandelt.
Das sind vier Conversions. (Die return 0;
geht es nicht um eine Umwandlung, da die 0
bereits vom Typ int
, das ist der Rückgabetyp für main
.)
Bei einem einigermaßen klug Compiler, ist es wahrscheinlich, dass keines dieser Umwandlungen in jedem nicht führen - generisch generierter Code Da keiner der Werte verwendet werden, könnte das gesamte Programm auf das Äquivalent von
int main(void) { return 0; }
reduziert werden aber alle vier Umwandlungen in der „abstrakte Maschine“ auftreten, die durch C Semantik.
(übrigens ist int main(void)
zu int main()
bevorzugt.)
Da 'x' nicht verwendet wird, kann eine optimierte Kompilierung" float x = f (5L); "löschen und es werden keine Konvertierungen durchgeführt. Ansonsten sehe ich 4+ Typänderungen. – chux
Keine der Conversions sind "Aktionen". –
Was ist das Casting 'int' zu 'float', um einen Wert von einer' int' Funktion zurückzugeben? –