今天在實現一個隊列時犯了一個很傻逼的錯誤。一個定義為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進行賦值就可以了。