Zrozumienie różnicy między f () i f (void) w C i C ++ raz na zawsze
Ok, więc usłyszałem różne opinie na ten temat i chcę się upewnić, że dobrze to rozumiem.
Dla C ++Deklaracjevoid f();
ivoid f(void);
dokładnie to samo, funkcjaf
nie przyjmuje żadnych parametrów. To samo dotyczy definicji.
Deklaracjavoid f(void);
oznacza, żef
nie przyjmuje żadnych parametrów.
Deklaracjavoid f();
oznacza tę funkcjęf
może mieć lub nie mieć parametrów, a jeśli tak, nie wiemy, jakie to są parametry, ani ile ich jest. Zauważ, że NIE jest taki sam jak elipsy, nie możemy użyćva_list
.
Tutaj jest coś ciekawego.
Przypadek 1Deklaracja:
void f();
Definicja:
void f(int a, int b, float c)
{
//...
}
Przypadek 2Deklaracja:
void f();
Definicja:
void f()
{
//...
}
Pytanie:Co dzieje się w czasie kompilacji w przypadkach 1 i 2, gdy dzwonimyf
z poprawnymi argumentami, błędnymi argumentami i bez argumentów? Co dzieje się w czasie wykonywania?
Jeśli zadeklarujęf
z argumentami, ale zdefiniuj je bez nich, czy to zmieni? Czy powinienem być w stanie zająć się argumentami z treści funkcji?