我是從一本書閱讀SIOF它舉了一個例子:靜態初始化順序的悲劇
//file1.cpp
extern int y;
int x=y+1;
//file2.cpp
extern int x;
int y=x+1;
現在我的問題是:
在上面的代碼中,將下面的事情發生嗎?
- 編譯file1.cpp時,編譯器會保留y,因爲它不會爲它分配存儲空間。
- 編譯器爲x分配存儲空間,但不初始化它。
- 編譯file2.cpp時,編譯器會離開x,即不爲其分配存儲空間。
- 編譯器爲y分配存儲空間,但不初始化它。
- 在鏈接file1.o和file2.o時,現在先讓file2.o初始化,那麼現在:
x是否獲取初始值0?或沒有被初始化?
謝謝..但在第1步中,當wll x和y將被初始化爲零: 在編譯時或鏈接時? – 2010-06-14 07:48:51
@Happy Mittal:你無法分辨,因此編譯器可能會選擇。它甚至可能在程序加載時。 – MSalters 2010-06-14 11:35:01