2
J'ai quelques fichiers de code source, tels hashtable.c et autres. Le principal problème est que quand j'écris mon main.c en tant que tel:déclaration des variables globales dans yacc
#include "tokens.h"
#include <stdio.h>
void yyerror(char *errorMsg)
{
fprintf(stderr, "%s\n", errorMsg);
}
main()
{
yyparse();
hsh = createHashtable();
}
Et en haut de mon fichier yacc (de parser.y), je veux declear une table de hachage en tant que tel:
%{
#include <stdio.h>
#include "tokens.h"
#include "ast.c"
struct hashtable *hsh;
.............................
..............................
Cependant, j'obtiens cette erreur.
main.c: In function ‘main’:
main.c:24: error: ‘hsh’ undeclared (first use in this function)
main.c:24: error: (Each undeclared identifier is reported only once
main.c:24: error: for each function it appears in.)
make: *** [main.o] Error 1
Je suis assez naïf en matière de programmation C, toute aide sera greatful
pouvez-vous être un peu plus précis, je suis confus – iva123
Vous devez déclarer dans votre main.c que le symbole 'hsh' est défini dans une autre unité de compilation. Ceci est accompli avec le modificateur 'extern'; voir http://wiki.answers.com/Q/What_is_the_use_of_extern_in_C – mrkj
Il serait préférable que l'utilisateur mette la déclaration extern dans un fichier d'en-tête et inclue cet en-tête dans la grammaire et le programme principal. L'un des deux fichiers devrait en fait définir la variable - le faire dans la grammaire est bon. –