C,Flex和Bison:错误:'yyerror'的冲突类型

时间:2017-12-10 16:01:15

标签: c bison flex-lexer

我正在使用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*);

发生了什么事?谢谢!

2 个答案:

答案 0 :(得分:1)

正确的声明是

void yyerror(const char* mens);

功能定义应该相同:

void yyerror(const char* mens) { … }

extern没有必要,虽然它没有受到伤害。但返回类型是强制性的。

不必将参数更改为const char*,但强烈建议使用,因为可以使用字符串文字作为参数调用yyerror

答案 1 :(得分:0)

extern版看起来很老。在这种情况下,隐式退货int不是void。你必须让两者保持一致。