C, Flex and Bison: error: conflicting types for ‘yyerror’

C, Flex and Bison: error: conflicting types for ‘yyerror’

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

发生了什么事?谢谢!

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

正确的声明是

<b>void</b> yyerror(<b>const</b> char* mens);

函数定义应该是一样的:

<b>void</b> yyerror(<b>const</b> char* mens) { … }

extern 不是必需的,尽管它不会造成伤害。但是 return 类型是必须的。

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