Ответ 1
Да, есть смысл. В C (но не в С++) функция, объявленная с пустым набором скобок, означает, что она принимает неопределенное количество параметров. Когда вы это делаете, вы запрещаете компилятору проверять количество и типы аргументов; это сохранение до того, как язык C был стандартизован ANSI и ISO.
Невозможность вызвать функцию с правильным числом и типами аргументов приводит к поведению undefined. Если вы явно заявляете, что ваша функция принимает нулевые параметры, используя список параметров void
, тогда компилятор выдаст вам предупреждение при назначении указателя функции неправильного типа:
int func1(); // declare function taking unspecified parameters
int func2(void); // declare function taking zero parameters
...
// No warning, since parameters are potentially compatible; calling will lead
// to undefined behavior
int (*fp1)(double) = func1;
...
// warning: assignment from incompatible pointer type
int (*fp2)(double) = func2;