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.

Dla C

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 1

Deklaracja:

void f();

Definicja:

void f(int a, int b, float c)
{
   //...
}
Przypadek 2

Deklaracja:

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?

Dodatkowe pytanie:

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?

questionAnswers(3)

yourAnswerToTheQuestion