Почему компилируется функция без параметров (по сравнению с фактическим определением функции)?

Я только что натолкнулся на чей-то C-код, который меня смущает, почему он компилируется. Есть два момента, которые я не понимаю.

Во-первых, прототип функции не имеет параметров по сравнению с фактическим определением функции. Во-вторых, параметр в определении функции не имеет типа.

#include <stdio.h>

int func();

int func(param)
{
    return param;
}

int main()
{
    int bla = func(10);    
    printf("%d", bla);
}

Почему это работает? Я проверил его в нескольких компиляторах, и он отлично работает.

Ответы на вопрос(10)

Ваш ответ на вопрос