Понимание разницы между f () и f (void) в C и C ++ раз и навсегда

Итак, я слышал разные мнения по этому вопросу и просто хочу убедиться, что я правильно понимаю.

Для C ++

Объявленияvoid f(); а такжеvoid f(void); означают точно то же самое, функцияf не принимает никаких параметров. То же самое для определений.

Для C

декларацияvoid f(void); Значит этоf не принимает никаких параметров.

декларацияvoid f(); означает, что функцияf может иметь или не иметь параметры, и если это так, мы нене знаю, что это за параметры или сколько их. Обратите внимание, что это не то же самое, что многоточие, мы можемт использовать.va_list

Теперь здесь все становится интереснее.

Случай 1

Декларация:

void f();

Определение:

void f(int a, int b, float c)
{
   //...
}
Дело 2

Декларация:

void f();

Определение:

void f()
{
   //...
}
Вопрос:

Что происходит во время компиляции в случаях 1 и 2, когда мы вызываемf с правильными аргументами, неправильными аргументами и без аргументов вообще? Что происходит во время выполнения?

Дополнительный вопрос:

Если я заявляюf с аргументами, но определите это без них, это будет иметь значение? Должен ли я иметь возможность обращаться к аргументам из тела функции?

Ответы на вопрос(3)

Ваш ответ на вопрос