2

make ファイルを使用して C コードをコンパイルしようとしています。次のエラーが表示されます。

/home/dev5/src/ermparselex.c:69: error: initializer element is not constant
/home/dev5/src/ermparselex.c:69: error: (near initialization for âyyinâ)

コード スニペットと行番号:

65 int yyleng; extern char yytext[];
 66 int yymorfg;
 67 extern char *yysptr, yysbuf[];
 68 int yytchar;
 69 FILE *yyin = stdin, *yyout = stdout;
 70 extern int yylineno;
 71 struct yysvf {
 72         struct yywork *yystoff;
 73         struct yysvf *yyother;
 74         int *yystops;};
 75 struct yysvf *yyestate;
 76 extern struct yysvf yysvec[], *yybgin;

との値はstdinstdoutこのコードのどこにも定義されていません。グーグルから適切な解決策を得ることができませんでした。このエラーが発生する理由は何ですか?

4

2 に答える 2

5

Cでは、グローバル変数は定数式または文字列リテラルでのみ初期化でき、定数式の規則はC++よりもはるかに厳格です。

stdinおよびstdoutはグローバルオブジェクトを参照するポインタであり、定数ではないため(アドレスはリンク時までわからない場合があります)、グローバル変数の初期化に使用することはできません。

于 2012-05-30T09:00:52.817 に答える
0

stdio.h をインクルードしていることを確認し、中かっこを削除します。

#include <stdio.h>

FILE *yyin = stdin, *yyout = stdout;

include は stdin/stdout を定義します。

中括弧 '{}' は、'stdin' と 'stdout' の値がコンパイラによってどのように解釈されるかを変更します。そうしないでください。

于 2012-05-30T08:03:41.303 に答える