Да, в этом есть смысл.В C (но не в C ++) функция, объявленная с пустым набором скобок, означает, что она принимает неопределенное количество параметров.Когда вы делаете это, вы не позволяете компилятору проверять количество и типы аргументов;это пережиток до того, как язык C был стандартизирован ANSI и ISO.
Неудачный вызов функции с правильным числом и типами аргументов приводит к неопределенному поведению .Если вы вместо этого явно объявите, что ваша функция принимает нулевые параметры, используя список параметров 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;