Какой тип возвращает функция и какое значение возвращает функция, это разные вещи.
В extern bar();
вы не объявили функцию, возвращающую void
, что означало бы, что ничего не возвращается.Это означает, что он возвращает что-то, и из-за истории языка C тип того, что он возвращает, по умолчанию равен int
.
При таком объявлении функция должна вернутьint
значение, если используется его возвращаемое значение.
В этом коде:
void bar(int a)
{
printf("a = %d\n",a);
}
вы не возвращаете значение.Нет return
заявления.Но возвращаемое значение используется в вашей подпрограмме main
.Результирующее поведение не определяется стандартом C.В стандарте C нет правил о том, что произойдет.