Что именно говорит это второе предложение? - PullRequest
0 голосов
/ 09 мая 2020

Поскольку аргумент вызова функции является выражением, преобразования типов также происходят, когда аргументы передаются в функцию. В отсутствие прототипа функции char и short становятся int, а float становится double.

Я получил первое предложение. Может кто-нибудь объяснить второе предложение?

В отсутствие прототипа функции char и short становятся int, а float становится double.

1 Ответ

0 голосов
/ 09 мая 2020

Стандарт C предоставляет два способа объявления функций. Современный способ, называемый прототипом, объявляет типы параметров. Например, void foo(char a, float b);. Старый способ не включает типы параметров. Например, void foo();.

В старом методе объявления функций целочисленные аргументы, меньшие, чем int, передаются как int (или, в некоторых случаях, как unsigned int) и * 1008. * аргументы передаются как double. Это возникло в основном из-за обстоятельств, в которых был разработан C, и гибкости, с которой он обрабатывал небольшие целые числа.

Если вы вызываете функцию, объявленную с прототипом, реализация C знает типы параметров и преобразует каждый аргумент в целевой тип. Если вы вызываете функцию, объявленную без прототипа, реализация C не знает истинных типов параметров в определении функции, но знает, что узкие целочисленные типы должны передаваться как int (или unsigned int) и float аргументы должны быть переданы как double. Таким образом, любые аргументы этих типов преобразуются в int, unsigned int или double, в зависимости от ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...