Разница в том, что не определено, что происходит для oo1
.
oo1 принимает переменную или любое количество аргументов, как кажется
Стандарт C делаетне гарантирую этого.Фактически, все, что стандарт C говорит по этому поводу, заключается в том, что функция определение с пустым списком аргументов совместима с объявлением функции со списком аргументов void
(ИСО / МЭК 9899 6.9.1,сноска 162).
То есть определение функции
int oo1() {…}
совместимо с объявлением прототипа
int oo1(void);
Другими словами, единственная безопасная вещь, которую вы можетеdo это вызвать oo1
без аргументов.Но компилятор C не обязан диагностировать нарушения этого.Тем не менее, современный компилятор C будет предупреждать:
предупреждение: слишком много аргументов при вызове 'oo1'
Обратите внимание на это предупреждение.Вы не должны вызывать oo1
с какими-либо аргументами.