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