Использование "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();