в С:func(void) vs.func() [дубликат]
Вопрос
На этот вопрос уже есть ответ здесь:
Когда функция C не принимает никаких аргументов, должна ли она быть объявлена/определена с параметром «void» в соответствии с правилами языка?Кажется, у PC-Lint возникают проблемы, когда в списке аргументов вообще ничего нет, и мне было интересно, есть ли что-то в синтаксисе языка, о котором я не знаю.
Редактировать: Я только что нашел дубликат (бэк-дуп?это было первым) вопрос, C недействительные аргументы, где больше ответов и объяснений.
Решение
void означает, что функция не принимает никаких параметров.Например,
int init (void)
{
return 1;
}
Это не то же самое, что определение
int init ()
{
return 1;
}
потому что во втором случае компилятор не будет проверять, действительно ли функция вызывается вообще без аргументов; вместо этого вызов функции с произвольным количеством аргументов будет принят без каких-либо предупреждений. (это реализовано только для совместимости с синтаксисом определения функций старого стиля, до ANSI).
Другие советы
IIRC func(void) в C объявит функцию, которая не принимает никаких параметров, тогда как func() объявляет функцию, которая будет принимать любое количество параметров.Я считаю, что последнее является артефактом, пришедшим из до-ANSI C.
В соответствии с Википедия здесь объявление func() по сути объявляет функцию «без информации о параметрах».