Мой друг спросил меня, могу ли я добавить функцию "замороженной верхней строки" в стандартную программу меньше *NIX. Я начал просматривать исходники и очень удивился определению функции имя файла.c:
public char *
last_component(name)
char *name;
{
....
}
Я писал какой-то код на C и обычно встречал:
return_type function_name arguments_list; если это прототип функцииreturn_type function_name arguments_list code-block если это определение функции.Но вот нашел кое-что новое: return_type function_name arguments listчто-то_таинственное; code block.
Что означает этот синтаксис?





Это старый синтаксис C (также известный как стиль K&R), где определение функции может быть записано так, что аргумент объявляется в следующей строке:
int func(a,b)
int a;
char b;
{
Подчеркивая то, что сказал Джон Боллинджер, это нет «точно такие же». Когда вызывается функция, объявленная только со стилем K&R, будут применены продвижения аргументов по умолчанию. Когда вызывается функция, объявленная в современном стиле (прототип), продвижение аргументов по умолчанию не будет применяться (за исключением аргументов, соответствующих ...), а аргументы будут преобразованы в типы параметров, как если бы они были присвоены. Например., с прототипом вы можете передать float в качестве аргумента int или наоборот. Без прототипа поведение не определено.
@eric и John, я хотел сделать вывод, что они были похожи с точки зрения синтаксиса, я обновил, чтобы отразить эту часть.
@EricPostpischil Хорошо, я согласен. Я бы расширил часть прототипа, но, поскольку она уже надуманна, я уберу неправильную часть.
Определение функции еще может должно быть записано таким образом. Это еще в стандарте. Кроме того, это нет точно так же, как и соответствующая подпись со списком типов параметров: определение в стиле K&R не предоставляет прототипа, и если прототипа нет в области действия в точке вызова (который может быть предоставлен отдельно), то это имеет практическое значение для интерпретации аргументов.