我正在尝试编译一个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 ();
我在网上阅读这个错误时可以看出这个代码需要重写吗?
如果有人可以帮我解决这个问题,我会非常高兴!
答案 0 :(得分:3)
FILE *msgfd = stderr;
全局范围内的对象无法通过非常量初始化。所有标准C版本都是这种情况。在您之前的实现中:编译器允许将其作为扩展或stderr
是地址常量。要修复错误,请将初始化(使用赋值)放在init函数中。