2009-07-22 4 views
18

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

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

ответ

33

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

int init (void) 
{ 
    return 1; 
} 

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

int init() 
{ 
    return 1; 
} 

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

+0

Спасибо, тайна решена. – noamtm

7

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

В соответствии с Wikipedia здесь функция func() в основном объявляет функцию «без информации о параметрах».

+0

Не является функцией, которая принимает любое количество параметров, определенных как func (...)? – noamtm

+2

Вы считаете правильным, в списках параметров K & R C были определены разные (и плохо). Но в C++ f() совпадает с f (void) –

+2

@noamtm - функция формы func (a, b, ...); объявляет функцию C, которая принимает список переменных аргументов, поэтому в определенном смысле также принимает любое количество параметров. –