2009-12-27 9 views
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

Répondre

6

Vous avez besoin d'un extern struct hashtable* hsh; dans votre main.c

+0

pouvez-vous être un peu plus précis, je suis confus – iva123

+0

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

+0

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. –