首頁 > 後端開發 > C++ > 是否允許和定義 C 和 C 中自動結構和陣列的部分初始化?

是否允許和定義 C 和 C 中自動結構和陣列的部分初始化?

Barbara Streisand
發布: 2024-12-11 08:49:10
原創
987 人瀏覽過

Is Partial Initialization of Automatic Structures and Arrays in C and C   Allowed and Defined?

C 和C 中自動結構體和數組的部分初始化

這種誤解源於錯誤的假設,即自動結構體和數組的部分初始化在C 中是允許的。與此信念相反,標準明確定義了僅兩種情況:完全初始化或不初始化初始化。

部分初始化

標準中未定義術語「部分初始化」。它指的是僅初始化結構體或陣列中的成員子集。

完全初始化

當結構體或陣列的所有成員都明確初始化時,就會發生完全初始化。例如:

struct somestruct {
  int a;
  int b;
  int c;
};

somestruct s = {1, 2, 3};
登入後複製

無初始化

未提供初始化時,行為取決於變數的儲存類型:

  • 對於自動變數(在堆疊上),未初始化的成員不保證被初始化。它們的值是不確定的。
  • 對於靜態變數(具有全域或檔案作用域),未初始化的成員對於整數型別初始化為 0,對於指標成員初始化為 NULL。

部分實踐中的初始化

儘管不是標準行為,但自動結構和數組成員的部分初始化是大多數編譯器都支持,包括Visual Studio 和gcc/g 。

C 標準(C99)

第6.7.8.21 節初始化

如果提供的初始值設定項少於聚合中元素或成員的數量,則剩餘元素為初始化為0。

C 標準(C 03)

第8.5.1 節聚合

如果有較少的初始化器,未初始化的成員被值初始化。值初始化因物件類型而異。例如,非聯合類別類型的非靜態資料成員是值初始化的,而整數等基本型別是零初始化的。

結論

部分自動結構和陣列的初始化是一種非標準行為,如果處理不當,可能會導致未定義的結果。為了確保可移植性和正確性,請務必確保完全初始化或不初始化。

以上是是否允許和定義 C 和 C 中自動結構和陣列的部分初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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