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
.