1

这段代码是什么意思?具体来说,花括号在做什么?它们不在函数的中间。

yyerror(s) char * s;

{
    fputs(s,stderr), putc('\n',stderr);
}
4

2 回答 2

9

这看起来像 K&R 语法。在标准 C 中,它看起来像:

int yyerror(char *s)
{
    fputs(s,stderr), putc('\n',stderr);
}

在这种情况下,函数体中的逗号运算符实际上也是空操作。您可以轻松地用分号替换它,并获得这个看起来更熟悉(和等效)的代码:

int yyerror(char *s)
{
    fputs(s,stderr);
    putc('\n',stderr);
}

请注意,int由于未指定返回类型,因此默认情况下假定此函数返回,但该函数不包含return语句。这意味着您不应该在程序中的任何地方依赖此函数的返回值。

于 2013-02-28T19:04:26.180 回答
2

旧式函数声明。

然后在函数体中:

fputs(s,stderr), putc('\n',stderr);

相当于

fputs(s,stderr); putc('\n',stderr);
于 2013-02-28T19:04:32.500 回答