簡體   English   中英

在C中初始化struct數組

[英]initialize array of struct in c

我應該將一些信息存儲在一次出現的struct向量中。 我事先知道數組的大小。 我的問題是:我應該使用對我來說代表無效輸入的結構初始化數組嗎? 例如,我應該執行以下操作:

typedef struct mystruct{
    int ID;
    int xvalue;
} my_struct;

#define NO_INPUT (my_struct) { ID=-1, xvalue=0}

其中ID = -1是對我沒有意義的輸入。 定義之后,我應該將數組初始化為NO_INPUT嗎? 最佳做法是什么? PS #define指令正確嗎? 它與C89標准兼容嗎? 提前致謝!

在不需要時選擇初始化存儲具有成本和優勢。 C讓您挑選毒葯。

成本觸及每個分配的字節。 對於大型陣列,這可能會很昂貴。 它可能會損害CPU緩存性能。 某些C運行時只有在觸摸到malloc頁面后,才會將它們malloc到程序的地址空間中。 初始化它們不利於優化。

優勢在於緩解和修復錯誤。 取消初始化初始化為NULL的指針會導致許多現代OS / CPU立即出現段錯誤。 這種“快速失敗”行為是一件好事。 未初始化的指針可以指向實際數據,因此,有缺陷的代碼將繼續運行,產生錯誤的答案或在很多以后失敗。 初始化值在調試器和錯誤消息中也更有意義。 它們還可以添加自初始化以來未使用過位置的斷言,以便檢測意外覆蓋。

由於這些優點,即使初始化的成本太高,某些程序也設計有“調試模式”,該模式包括額外的初始化和帶有預處理器指令的代碼檢查,或者在運行時動態啟用/禁用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM