Ca marche mal car:
main() {
}
est cense marcher
Fonction Skip: Saute toutes les directives de preprocessing, les espacs vides, les sauts de lignes, les commentaires.
Retourne un ptr vers un caractere.
Fonction SkipBloc: Saute un bloc { } pour acceder ou } correspondant. Retourne un ptr vers le char juste apres.
D'ou l'algo:
a = Skip(a);
si a ressemble a "machin truc (bidule) {" (Attention aux espaces et aux commentaire et aux directives! Conseil fait une fct NextWord) */
alors c'est un proto.
sinon a = ptr vers le ';' ou le le '{' qui suit.
Si a == '{', alors a = SkipBlock(a) -Gestion de bloc recursives-
sinon a = a+1;
Boucle infinie de ca
Verifie bien qu'il y est le bon nombre d'accolade.
Et a ta place je ferais une premiere passe automatique par le preprocesseur (gcc -E -o machin.e machin.c), car on peut aussi avoir:
int FUNCTION_DEF(f, (int x, int y))
{
}
Ou plus vicieux encore
En plus ca enleve les commentaires et les diretives de preprocessing