Reihenfolge der Funktionsaufrufe

Hi,

ich hab noch nicht so die Ahnung von C und folgendes Problem:
Ich habe mit Visual C++ 6.0 ein paar Funktionen implementiert (nicht objektorientiert) die sich gegenseitig aufrufen.
Jetzt meldet mir der Compiler, daß die Funktion die in der ersten Funktion aufgerufen wird ein „nicht deklarierter Bezeichner“ ist obwohl sie direkt danach implementiert ist…
Liegt das am Compiler? Kann ich am Anfang so was wie Funktionsdefinitionen angeben damit der Compiler weiß, daß da noch was kommt?

Besten Dank,
Rbr2000

Kann ich am Anfang so was wie Funktionsdefinitionen angeben
damit der Compiler weiß, daß da noch was kommt?

Klar, solltest du sogar. Allerdings sollte an der Stelle dann auch gleich ein wichtiger Unterschied erklärt werden, nämlich der zwischen Deklaration und Definition. Funktionen können (und sollten) frühzeitig deklariert werden, so dass der Compiler den Bezeichner und die Signatur kennt, das sieht dann z.B. so aus:

void func\_a( int a );
int func\_b( void );

Danach ist es relativ egal, wo die Funktionen definiert werden (also der Funktionskörper gegeben wird), solange der Linker alle Aufrufe auflösen kann. Es ist dann also völlig egal, wo und in welcher Reihenfolge man das tut.

void func\_a( int a ) {
 printf( "%d\n", a );
}

int func\_b( void ) {
 func\_a( 7 );
 return 5;
}

int main( int argc, char\*\* argv ) {
 func\_a( func\_b );
 exit(0);
}