1、前言
今天在公司看一同僚寫的代碼,代碼中用到了struct,初始化一個struct用的是亂序格式,如下代碼所示:
通常初始化一個結構體的方式是按序初始化,形如:data_t data={10,20}。感覺很好奇,如是上網百度一下,發現linux下struct初始化可以采用順序和亂序兩種方式,而亂序又有兩種不同的形式。本文總結一下struct兩種初始化方式的優缺點,并給出完整的測試程式。
2、順序初始化
教科書上講c語言結構體初始化是按照順序方式來講的,沒有涉及到亂序的方式。順序初始化struct必須要按照成員的順序進行,缺一不可,如果結構體比較大,很容易出現錯誤,而且表現形式不直覺,不能一眼看出各個struct各個資料成員的值。
3、亂序初始化
亂序初始化是c99标準新加的,比較直覺的一種初始化方式。相比順序初始化而言,亂序初始化就如其名,成員可以不按照順序初始化,而且可以隻初始化部分成員,擴充性較好。linux核心中采用這種方式初始化struct。
亂序初始化有兩種方式,一種是用點(.)符号,一種是用冒号(:)。方式1是c99标準,方式2是gcc的擴充,強烈建議使用第一種方式。
4、測試程式
測試結果如下圖所示: