O que é o mecanismo de declaração de função local C?
A declaração de função local parece ser permitida no gcc, e eu encontrei uma discussão sobre isso:Existe algum uso para declarações de função local?
No entanto, minha pergunta é: é permitido pelo padrão ISO C? Se for, como explicar o seguinte fenômeno que o torna intrigante:
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) {}
enquanto
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 */ }
De acordo com o padrão C99: os nomes das funções estão na mesma categoria de nomenclatura. Então, discutiremos o mecanismo de escopo para explicar isso. Mas como?
Na verdade, estou trabalhando em um projeto de curso do compilador que exige a implementação de uma versão simplificada do compilador C. Eu estava tentando lidar com este caso, mas fiquei confuso.
EDITAR: Eu sei que é do conhecimento geral que C é orientado a procedimentos e requer que os nomes das funções sejam exclusivos. Mas esse estilo local de declaração agita uma situação clara e é difícil para mim entender seu princípio / regra.