В C f
не принимает «никаких аргументов», а скорее «любые аргументы» *. Скажите int f(void)
, чтобы объявить "без аргументов".
Это отличается от C ++. В частности, C имеет отдельные понятия функции «объявление» и функции «прототип»:
int f(); /* declaration -- f is still a mystery */
int f(int, double); /* prototype -- now we know how to call f */
int f(int n, double c) { return -1; } /* defintion -- now we can link */
*) Как я уже говорил в комментарии, «любые аргументы» ограничены типами, которые не подвергаются продвижению по умолчанию (так же, как продвижение по умолчанию происходит с переменными аргументами). То есть float
, все разновидности char
и short int
, а также ...
, не допустимы в фактической сигнатуре функции.