Я только что натолкнулся на чей-то 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)
.