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語言編程,任何援助將不勝感激
你能成爲一個更具體一點,我很困惑 – iva123 2009-12-27 14:28:03
您需要在main.c中聲明符號'hsh'是在其他編譯單元中定義的。這是用'extern'修飾符完成的。請參閱http://wiki.answers.com/Q/What_is_the_use_of_extern_in_C – mrkj 2009-12-27 14:40:18
如果用戶將extern聲明放在頭文件中,並將該頭文件包含在語法和主程序中,會更好。這兩個文件中的一個實際上應該定義變量 - 在語法中這樣做很好。 – 2009-12-27 17:09:18