2009-12-27 173 views
2

我有幾個源代碼文件,如hashtable.c等。主要的問題是,當我寫我的main.c這樣:在yacc中聲明全局變量

#include "tokens.h" 
#include <stdio.h> 
void yyerror(char *errorMsg) 
{ 
fprintf(stderr, "%s\n", errorMsg); 
} 


main() 
{ 
    yyparse(); 
    hsh = createHashtable(); 

} 

而且在我的yacc文件(parser.y)的頂部,我想declear哈希表這樣:

%{ 
#include <stdio.h> 
#include "tokens.h" 
#include "ast.c" 


struct hashtable *hsh; 
............................. 
.............................. 

但是我得到這個錯誤。

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 

我比較幼稚,而涉及到C語言編程,任何援助將不勝感激

回答

6

您需要在您的extern struct hashtable* hsh;main.c

+0

你能成爲一個更具體一點,我很困惑 – iva123 2009-12-27 14:28:03

+0

您需要在main.c中聲明符號'hsh'是在其他編譯單元中定義的。這是用'extern'修飾符完成的。請參閱http://wiki.answers.com/Q/What_is_the_use_of_extern_in_C – mrkj 2009-12-27 14:40:18

+0

如果用戶將extern聲明放在頭文件中,並將該頭文件包含在語法和主程序中,會更好。這兩個文件中的一個實際上應該定義變量 - 在語法中這樣做很好。 – 2009-12-27 17:09:18