в c: func(void) против func()

Когда функция C не принимает никаких аргументов, должна ли она быть объявлена/определена с параметром «void» по правилам языка? Кажется, у PC-Lint есть проблемы, когда в списке аргументов вообще ничего нет, и мне было интересно, не связано ли это с синтаксисом языка, о котором я не знаю.

Редактировать: я только что нашел дубликат (обратный дубликат? он был первым) вопрос, C void arguments, который содержит больше ответов и объяснений.


person noamtm    schedule 22.07.2009    source источник


Ответы (2)


void означает, что функция не принимает никаких параметров. Например,

int init (void)
{
    return 1;
}

Это не то же самое, что определить

int init ()
{
    return 1;
}

потому что во втором случае компилятор не будет проверять, действительно ли функция вызывается вообще без аргументов; вместо этого вызов функции с произвольным количеством аргументов будет принят без каких-либо предупреждений (это реализовано только для совместимости с синтаксисом определения функции в старом стиле, до ANSI).

person dfa    schedule 22.07.2009

IIRC func(void) в C объявит функцию, которая не принимает параметров, тогда как func() объявляет функцию, которая будет принимать любое количество параметров. Я полагаю, что последний является артефактом, появившимся до ANSI C.

Согласно Википедии, объявление func() фактически объявляет функцию "без информации о параметрах».

person Timo Geusch    schedule 22.07.2009
comment
Разве функция, которая принимает любое количество параметров, не определена как func(...) ? - person noamtm; 22.07.2009
comment
Вы считаете правильным, в K&R C списки параметров были определены разные (и плохо). Но в C++ f() — это то же самое, что и f(void) - person Henk Holterman; 22.07.2009
comment
@noamtm - функция вида func(a, b, ...); объявляет функцию C, которая принимает список переменных аргументов, так что в некотором смысле она также принимает любое количество параметров. - person Timo Geusch; 22.07.2009