"错误:初始化元素不是常数"在16岁的代码

时间:2014-06-17 08:02:04

标签: c linux gcc compilation

我正在尝试编译一个16岁的Linux C程序。无论如何。我刚刚编辑Makefile并将编译器更改为旧版本。我现在面临着我认为只会在较旧的编译器中编译的错误,尽管我不能选择较旧的错误,因为这会破坏系统解决方案。我不太熟悉C. 我在尝试编译时使用Gentoo linux和GCC 3.4.6版。

./src/radcheck.c:97: error: initializer element is not constant
make: *** [src/radcheck.o] Error 1

有问题的代码,File * msgfd = stderr;是令人不快的第97行。

FILE           *ddt = NULL;
FILE           *msgfd = stderr;
extern void     dir_init ();

我在网上阅读这个错误时可以看出这个代码需要重写吗?

如果有人可以帮我解决这个问题,我会非常高兴!

1 个答案:

答案 0 :(得分:3)

FILE *msgfd = stderr;

全局范围内的对象无法通过非常量初始化。所有标准C版本都是这种情况。在您之前的实现中:编译器允许将其作为扩展或stderr是地址常量。要修复错误,请将初始化(使用赋值)放在init函数中。