Was ist der Deklarationsmechanismus für C-lokale Funktionen?
Lokale Funktionsdeklaration scheint in gcc erlaubt zu sein, und ich fand eine Diskussion dazu:Gibt es eine Verwendung für lokale Funktionsdeklarationen?
Meine Frage ist jedoch: Ist es gemäß ISO C-Standard zulässig? Wenn ja, wie erklärt man das folgende Phänomen, das es verwirrt:
int main(void) {
int f(void);
f();
}
void g(void) {
/* g has no idea about f. It seems that the decl is limited within its
* scope */
f();
}
int f(void) {}
während
int main(void) {
int f(void);
f();
}
void f(void); /* error because disagreement with the local declaration (local
declaration goes beyound its scope?) */
void f(void) { /* definition here */ }
Nach dem C99-Standard: Funktionsnamen gehören zur selben Benennungskategorie. Wir werden daher den Scoping-Mechanismus diskutieren, um dies zu erklären. Aber wie?
Derzeit arbeite ich an einem Compiler-Kursprojekt, bei dem wir eine vereinfachte Version des C-Compilers implementieren müssen. Ich habe versucht, mich mit diesem Fall zu befassen, war aber verwirrt.
BEARBEITEN: Ich weiß, es ist allgemein bekannt, dass C prozedurorientiert ist und dass Funktionsnamen eindeutig sein müssen. Aber dieser lokale Erklärungsstil schafft eine klare Situation und es fällt mir schwer, sein Prinzip / seine Regel zu verstehen.