这段代码是什么意思?具体来说,花括号在做什么?它们不在函数的中间。
yyerror(s) char * s;
{
fputs(s,stderr), putc('\n',stderr);
}
这段代码是什么意思?具体来说,花括号在做什么?它们不在函数的中间。
yyerror(s) char * s;
{
fputs(s,stderr), putc('\n',stderr);
}
这看起来像 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
语句。这意味着您不应该在程序中的任何地方依赖此函数的返回值。
旧式函数声明。
然后在函数体中:
fputs(s,stderr), putc('\n',stderr);
相当于
fputs(s,stderr); putc('\n',stderr);