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;

stdin和的值stdout未在此代码中的任何位置定义。我无法从谷歌获得适当的解决方案。知道为什么会发生此错误吗?

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;

包含定义标准输入/标准输出。

大括号 '{}' 改变了编译器如何解释 'stdin' 和 'stdout' 的值,不要那样做。

于 2012-05-30T08:03:41.303 回答