1. 程式人生 > >error C2099: initializer is not a constant

error C2099: initializer is not a constant

//以下程式碼存為c檔案時,,會報錯,改為cpp檔案,則不報錯。主要原因:編譯器不一樣。

//全域性變數是儲存在靜態儲存區的,因此在編譯的時候只能用常量進行初始化,而不能用變數進行初始化。
//在該程式中是用函式的返回值給變數進行初始化的,因此會出錯。

//在這裡說一下全域性變數和區域性變數的在編譯時的不同的處理方式,在程式編譯的時候全域性變數必須用常量進行初始化,
//也就是說直接在全域性變數的記憶體地址直接儲存變數的值;
//對於區域性變數則在編譯的時候不需要這樣,編譯的時候只需要將區域性變數的賦值語句編譯成機器程式碼,在程式執行到這裡是在進行區域性變數的賦值。

//該問題有一個解決方法就是,可以用g++編譯器對該程式進行編譯,再碰到這裡時,編譯器會先把全域性變數儲存到.bss段中,而且預設值為0,
//但是會在main函式之前新增一條賦值語句,也就是相當於區域性變數進行處理了。
#include <stdio.h>

int my(const int a)
{
	static int count = a;
	return a + count;
}

int main()
{
	//printf("%d\n",my(4));
	//printf("%d\n",my(5));
	printf("%d\n%d\n%d\n",my(6),my(5),my(4));
	
	while (1);
	return 0;
}