今天在实现一个队列时犯了一个很傻逼的错误。一个定义为struct类型的全局变量,我在想定义完后立刻初始化,就写成类似下面这种样子:

struct
{
	int i;
	int j;
} test;
 
test.i = 1;
test.j = 1;

结果gcc编译器报错,“initializer element is not constant”
在我的实际情况中,test的成员变量i和j也为strcut类型,报的错为“struct expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘”

真神奇,int char类型都可以直接初始化,struct类型就不行。

最后在http://bbs.chinaunix.net/thread-1285396-1-1.html的4楼找到了说法。全局变量在编译时就必须确定其值,故C有静态存储区数据必须用常量初始化的规定。

其实很简单, 在全局空间定义struct test,然后再写一个初始化函数对test进行赋值就可以了。