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 に答える