我正在使用Flex和Bison在C中完成一个项目,但我在编译期间发现了一个错误。
这是错误:
A_Sintactico.yy:186:6: error: conflicting types for ‘yyerror’
In file included from A_Sintactico.yy:3:0:
A_Lexico.l:15:8: note: previous declaration of ‘yyerror’ was here
extern yyerror(char*);
^
A_Sintactico.yy中的yyerror代码:
void yyerror(char* mens){
extern int numlin;
fprintf(stderr, "Error sintactico en la linea %i %s\n", numlin, mens);
}
A_Lexico.l中的yyerror代码
extern yyerror(char*);
发生了什么事?谢谢!
答案 0 :(得分:1)
正确的声明是
void yyerror(const char* mens);
功能定义应该相同:
void yyerror(const char* mens)
{ … }
extern
没有必要,虽然它没有受到伤害。但返回类型是强制性的。
不必将参数更改为const char*
,但强烈建议使用,因为可以使用字符串文字作为参数调用yyerror
。
答案 1 :(得分:0)
extern
版看起来很老。在这种情况下,隐式退货int
不是void
。你必须让两者保持一致。