В c: func (void) vs. func()
Когда функция C не принимает никаких аргументов, нужно ли ее объявлять/определять с помощью параметра "void" с помощью правил языка?
PC-Lint, похоже, имеет проблемы, когда в списке аргументов ничего нет вообще, и мне было интересно, если это что-то в синтаксисе языка, о котором я не знаю.
Изменить: Я только что нашел дубликат (back-dupe? он пришел первым) вопрос, C void arguments, который имеет больше ответов и объяснения.
Ответы
Ответ 1
void означает, что функция не принимает никаких параметров. Например,
int init (void)
{
return 1;
}
Это не то же самое, что определение
int init ()
{
return 1;
}
потому что во втором случае компилятор не проверяет, действительно ли функция вызывается без каких-либо аргументов; вместо этого вызов функции с произвольным числом аргументов будет принят без каких-либо предупреждений (это реализовано только для совместимости с синтаксисом определения стиля старого стиля, pre-ANSI).
Ответ 2
Функция IIRC func (void) в C объявит функцию, которая не принимает никаких параметров, тогда как функция func() объявляет функцию, которая будет принимать любое количество параметров. Я считаю, что последний является артефактом, исходящим от ANSI C.
В соответствии с Wikipedia, выражение func() в основном объявляет функцию "без информации о параметрах".