在yacc中声明全局变量

在yacc中声明全局变量,c,global-variables,yacc,C,Global Variables,Yacc,我有一些源代码文件,比如hashtable.c等等。主要问题是,当我编写main.c时: #include "tokens.h" #include <stdio.h> void yyerror(char *errorMsg) { fprintf(stderr, "%s\n", errorMsg); } main() { yyparse(); hsh = createHashtable(); } 谈到C编程,我相当幼稚,任何帮助都将是巨大的您需要一个外部结构哈希表*h

我有一些源代码文件,比如hashtable.c等等。主要问题是,当我编写main.c时:

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


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

}

谈到C编程,我相当幼稚,任何帮助都将是巨大的

您需要一个
外部结构哈希表*hsh
在你的
main.c

你能说得更具体一点吗,我很困惑你需要在你的main.c中声明符号“hsh”是在其他编译单元中定义的。这是通过“extern”修饰符完成的;请看,如果用户将extern声明放在头文件中,并在语法和主程序中都包含该头文件,那么效果会更好。这两个文件中的一个实际上应该定义变量——在语法中这样做是可以的。
%{
#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