Я смущен тем, почему нам нужно передать 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 вы просто используете пустые круглые скобки: