Ответ 1
Нет никаких преимуществ или недостатков. C поддерживает это для совместимости с K & R C с 1980-х годов. Вам может понравиться эта функция, если вы все еще используете код, написанный в 1980-х годах. Вам может не понравиться эта функция, если вы хотите получить лучшую диагностику от своего компилятора.
void func();
В C это означает, что func
принимает неуказанные параметры.
Если вам нужно указать, что функция не принимает никаких параметров, напишите ее следующим образом:
void func(void);
В С++ два прототипа одинаковы. (В C только второй - прототип.) Если вы скомпилируете с помощью параметра GCC/Clang -Wstrict-prototypes
, вы получите предупреждения для использования void func();
в C, как и должно быть.
Речь идет только о объявлениях .. В обоих языках следующие функции определения совпадают:
// These two are the SAME
void func() { }
void func(void) { }
// These two are DIFFERENT
void func();
void func(void);