Я только что натолкнулся на чей-то C-код, который меня смущает, почему он компилируется. Есть два момента, которые я не понимаю.
Во-первых, прототип функции не имеет параметров по сравнению с фактическим определением функции. Во-вторых, параметр в определении функции не имеет типа.
#include <stdio.h>
int func();
int func(param)
{
return param;
}
int main()
{
int bla = func(10);
printf("%d", bla);
}
Почему это работает? Я проверил его в нескольких компиляторах, и он отлично работает.
-Wstrict-prototypesобоими int func()и int main(): xc: 3: warning: объявление функции не является прототипом. Вы должны объявить , main()как main(void)и.
int func();совместим с int func(arglist) { ... }.
int main(void).

