Понимание разницы между f () и f (void) в C и C ++ раз и навсегда
Итак, я слышал разные мнения по этому вопросу и просто хочу убедиться, что я правильно понимаю.
Для C ++Объявленияvoid f();
а такжеvoid f(void);
означают точно то же самое, функцияf
не принимает никаких параметров. То же самое для определений.
декларация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
с аргументами, но определите это без них, это будет иметь значение? Должен ли я иметь возможность обращаться к аргументам из тела функции?