我正在考慮一個特定的解決方案,我想初始化一個在其他模塊中定義的數組的單元格(將有許多模塊初始化一個表)。在運行main之前,數組不會被讀取(所以沒有靜態初始化順序的問題)。部分初始化在其他模塊中定義的變量
我的方法:
/* secondary module */
extern int i[10]; // the array
const struct Initialize {
Initialize() { i[0] = 12345; }
} init;
/* main module */
#include <stdio.h>
int i[10];
int main()
{
printf("%d\n", i[0]); // check if the value is initialized
}
編譯器不會去掉init
恆定的,因爲構造函數有副作用。我對嗎?機制好嗎?在GCC(-O3)上一切都很好。
//編輯
在現實世界中會有很多模塊。 我想避免一個額外的模塊,一箇中央的地方,將收集所有小的初始化例程(爲了更好的可伸縮性)。所以這很重要,每個模塊都會觸發自己的初始化。
您仍然認爲在每個模塊初始化期間,i []數組已經分配(未初始化)。 – 2010-07-06 16:20:14
當應用程序啓動時,AFAIK靜態存儲空間在一個步驟中被分配(並歸零)。 – adf88 2010-07-06 16:25:45
UP:它是**全局**靜態存儲空間 – adf88 2010-07-06 16:32:27