Я вижу в общей сложности 4 преобразования типов (ни одна из которых не является «рекламными акциями»).
Внутри f()
значение x
явно преобразуется из int
в float
оператором литой, В результате этого преобразования неявно преобразуется из float
в int
в return
заявлении.
Внутри main()
, значение константы 5L
неявно преобразуется из long int
в int
, когда она передается в качестве аргумента f
. Результат вызова f
неявно преобразован из int
в float
путем инициализации x
.
Это четыре преобразования. (The return 0;
не влечет за собой преобразование, так как 0
уже типа int
, что тип возвращаемого значения для main
.)
Учитывая достаточно умный компилятор, вполне вероятно, что ни один из этих преобразований не приведет к какой-либо не - тривиальный сгенерированный код. Поскольку ни одно из значений не используется, вся программа может быть уменьшена до эквивалента
int main(void) { return 0; }
Но все четыре преобразований происходят в «абстрактной машине», определенной семантикой языка C.
(кстати, int main(void)
предпочтительно int main()
.)
Поскольку 'x' не используется, оптимизированный компилятор может удалить' float x = f (5L); 'и нулевые преобразования. Помимо этого я вижу изменения типа 4+. – chux
Ни одна из конверсий не является «рекламными акциями». –
Что отличает 'int' от 'float', чтобы вернуть значение из функции' int'? –