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
.