允许 C 编译器中的函数重载(抑制 C 中的"conflicting types for "错误)



假设我有一个C代码,它在C中有两个不同的声明。

struct pcdata
{
    int x; int y;
};
int yyparse (struct pcdata *pp);
int yyparse (void *pp);
int yyparse (struct pcdata *pp)
{
}

用cc/gcc编译代码,我有conflicting types错误。

test> cc -c hello.c
hello.c:7:5: error: conflicting types for 'yyparse'
int yyparse (void *pp);
    ^
hello.c:6:5: note: previous declaration is here
int yyparse (struct pcdata *pp);
^
1 error generated.
test> gcc -c hello.c
hello.c:7: error: conflicting types for ‘yyparse’
hello.c:6: error: previous declaration of ‘yyparse’ was here

g++没有错误,因为c++允许函数重载。

test> g++ -c hello.c

是否有允许函数重载的gcc选项?我有这个(简化的)代码与Bison 2.7生成的tab.c代码。

这在C中肯定不起作用,但应该没有必要。

bison通常创建一个完全不接受参数的yyparse,但您可以使用%parse-param声明(至少在不太旧的bison版本中)来告诉bison您希望它接受什么参数。

在所有情况下,只有一个yyparse,除非您有两个单独的解析器编译到同一个程序中,当然,当您有多个语法需要解析时,就会发生这种情况。在这种情况下,您可以使用%name-prefix来告诉bison,bison生成的解析器中的一个或两个应该使用yy以外的前缀。

C没有函数重载。

相关内容

  • 没有找到相关文章

最新更新