Использование "void" в C
Я смущен тем, почему нам нужно передать void
в функции C:
int f(void) { return 0; }
против
int f() { return 0; }
Что нужно делать и почему?
Ответы
Ответ 1
В C, int f()
- это декларация старого стиля. В нем говорится, что f
ожидает фиксированное, но неуказанное число и тип аргументов. Например, при задании int f() { return 0; }
компилятор не будет жаловаться на f(42)
или f("hello, world")
(хотя поведение такого вызова undefined).
int f(void)
явно говорит, что f
не принимает аргументов.
(С++ имеет разные правила, Stroustrup не был так обеспокоен обратной совместимостью со старым кодом C.)
Ответ 2
Это остаток C.
f(void)
не принимает аргументов, поэтому f(1)
является недопустимым.
f()
означает, что параметры не определены, поэтому f(1)
здесь.
Ответ 3
void
в этом случае означает "нет параметров". Я не уверен, скомпилирует ли ваш второй случай, но в любом случае я предпочел бы, чтобы первый случай был как можно более ясным. Конечно, при вызове f
вы просто используете пустые круглые скобки:
int x = f();