getint (int *);
Я не совсем уверен, что означает getint (int *)
означает? Может кто-нибудь объяснить это?Что означает getint (int *)?
getint (int *);
Я не совсем уверен, что означает getint (int *)
означает? Может кто-нибудь объяснить это?Что означает getint (int *)?
Это прототип функции, объявляющий функцию getint()
. Функция принимает в качестве параметра указатель на int
.
При прототипировании функции нет необходимости указывать имена параметров.
В прототипе отсутствует тип возврата, который по умолчанию по умолчанию int
. Однако отказ от типа возврата нарушает недавний стандарт C, поэтому код, сделанный таким образом, может считаться недействительным.
Эквивалент
getint(int *);
хотя бы
int getint(int * pi);
TL; DRgetint (int *);
является опережающим объявлением для функции, в стиле программирования очень плохо. Без какого-либо явного типа возврата он будет по умолчанию равен int
.
Рекомендуемый способ написать это, чтобы указать тип возвращаемого значения в явном виде, как
если int
, как
int getint(int *); //yes, omitting the identifier name is correct, see note below
или
int getint(int * outVar); //we can have the name, if we want.
если void
, подобный
void getint(int *);
или
void getint(int * outVar);
или любой тип возврата вы хотите.
Примечание:
Просто для дальнейшего использования, от C11
, глава §6.7.6.3, Функция declarators, (курсив мой)
Если в объявлении
'T D1'
,D1
имеет видD(parameter-type-list)
...
Список типов параметров определяет типы и может объявлять идентификаторы для параметров функции.
Таким образом, имя идентификатора не является обязательным.
Или еще лучше, используя также описательный формальный параметр: 'int getint (int * result)'. –
@AugustKarlstrom _maybe_ лучше, но не ** требуется **, однако обновил мой ответ. :-) –
"* if' int' ... * ":' getint() 'в соответствии с OP ** ** возвращает' int' (или считается недопустимым из-за отсутствия возвращаемого типа). – alk
Код не действителен C. Если он компилируется, рассмотрите возможность обновления до компилятора, который не старше 15 лет.
Урок истории:
В старых, вышедших из употребления версий стандарта C вы разрешили опустить тип возвращаемого при написании функции декларации, в этом случае getint(int *);
будет означать то же самое, как int getint(int *);
, потому что если вы указали тип возврата не будет по умолчанию int
. Тем не менее, это была плохая практика еще в 1990 году.
Нет никакой разницы между этими двумя инструкциями? – user3826752
Обратите внимание, что неявное правило int было удалено с C99. Так что это не действительный прототип. –
@BlueMoon Даже при использовании GCC в режиме C89 вы получаете предупреждение, когда отсутствует тип возврата. –