C и C ++ отличаются в этом отношении.
C 2011 Онлайн Стандарт
6.7.6.3 Деклараторы функций (включая прототипы)
...
10 Особый случай безымянного параметра типа voidв качестве единственного элемента в списке указывает на то, что функция не имеет параметров.
...
14 Список идентификаторов объявляет только идентификаторы параметров функции. Пустой список в деклараторе функции, который является частью определения этой функции, указывает на то, что функция не имеет параметров. Пустой список в объявителе функции, который не является частью определения этой функции, указывает на то, что информация о количестве или типах параметров не предоставляется. 145)
Короче говоря, пустой список параметров в функции декларации указывает , что функция принимает неопределенное количество параметров, в то время как пустой список параметров в функции определения указывает , что функция не принимает ни одного параметра.
T foo( void ); // declaration, foo takes no parameters
T bar(); // declaration, bar takes an *unspecified* number of parameters
T foo( void ) { ... } // definition, foo takes no parameters
T bar() { ... } // definition, bar takes no parameters
Что касается C, вы никогда не должны использовать пустой список идентификаторов в объявлении или определении функции. Если функция не предназначена для принятия каких-либо параметров, укажите это с помощью voidсписка параметров.
Онлайн стандарт C ++
8.3.5 Функции [dcl.fct]
...
4 Параметр-объявление-предложение определяет аргументы, которые могут быть указаны, и их обработку при вызове функции. [ Примечание: параметр декларирование придаточного используется для преобразования аргументов , указанных в вызове функции; см. 5.2.2. - примечание конца ] Если предложение -объявление-предложение пусто, функция не принимает аргументов. Список параметров, состоящий из одного безымянного параметра независимого типа void, эквивалентен пустому списку параметров. За исключением этого особого случая, параметр не должен иметь тип cv void. Если параметр-объявление-предложениезаканчивается многоточием или пакетом параметров функции (14.5.3), число аргументов должно быть равно или больше количества параметров, которые не имеют аргумента по умолчанию и не являются пакетами параметров функции. Там, где синтаксически правильно и где «...» не является частью абстрактного декларатора , «, ...» является синонимом «...». [ Пример: объявление int printf(const char*, ...);
объявляет функцию, которая может быть вызвана с различными номерами и типами аргументов. printf("hello world");
printf("a=%d b=%d", a, b);
Тем не менее, первый аргумент должен быть такого типа , который может быть преобразован в const char*- конец примера ] [ Примечание: Стандартный заголовок <cstdarg>содержит механизм для доступа аргументов , передаваемых с помощью многоточие (см 5.2.2 и 18.10). - конец примечания ]
В случае C ++ пустой список параметров в объявлении или определении указывает, что функция не принимает аргументов и эквивалентна использованию списка параметров void.