首頁 > 後端開發 > C++ > C 中的靜態初始化順序慘敗期間會發生什麼?

C 中的靜態初始化順序慘敗期間會發生什麼?

Patricia Arquette
發布: 2024-12-11 02:05:09
原創
330 人瀏覽過

What Happens During Static Initialization Order Fiasco in C  ?

「靜態初始化順序慘敗」謎團揭曉

當C 程式中的多個檔案包含依賴靜態變數的靜態變數時,就會出現臭名昭著的「靜態初始化順序慘敗」(SIOF)。彼此進行初始化。考慮以下範例:

// file1.cpp
extern int y;
int x = y + 1;

// file2.cpp
extern int x;
int y = x + 1;
登入後複製

問題:

  1. 在編譯file1.cpp 期間,編譯器是否:

    • 分配儲存空間y?
    • 初始化x?
  2. 在編譯file2.cpp期間,編譯器是否:

    • 為x分配儲存?
    • 初始化y?
    • 為x分配儲存?
  3. 初始化y?
    • 連結file1.o和 file2.o 時,如果先初始化 file2.o,則:
    • x 收到初始值值 0?
  4. x 仍然存在未初始化?

答案:

  1. 依C標準(3.6.2“非本地的初始化」)物件"):a.
    編譯器為y.b.
  2. 分配儲存空間。的存儲,但
  3. 初始化it.a.
    編譯器為x分配存儲。 b.
  4. 編譯器為y分配存儲,但
  5. 初始化it.a.
    x 接收初始值0.b.
  6. x

保持未初始化。 🎜>

    第 1步:
  • x 和y 在任何其他初始化之前都初始化為零。已初始化的變數接收值1,因為另一個變數已零初始化。然後動態初始化另一個變量,接收值 2。

以上是C 中的靜態初始化順序慘敗期間會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板