天天看點

Linux下C結構體初始化[總結]

1、前言

  今天在公司看一同僚寫的代碼,代碼中用到了struct,初始化一個struct用的是亂序格式,如下代碼所示:

Linux下C結構體初始化[總結]
Linux下C結構體初始化[總結]

   通常初始化一個結構體的方式是按序初始化,形如:data_t data={10,20}。感覺很好奇,如是上網百度一下,發現linux下struct初始化可以采用順序和亂序兩種方式,而亂序又有兩種不同的形式。本文總結一下struct兩種初始化方式的優缺點,并給出完整的測試程式。

2、順序初始化

  教科書上講c語言結構體初始化是按照順序方式來講的,沒有涉及到亂序的方式。順序初始化struct必須要按照成員的順序進行,缺一不可,如果結構體比較大,很容易出現錯誤,而且表現形式不直覺,不能一眼看出各個struct各個資料成員的值。

3、亂序初始化

  亂序初始化是c99标準新加的,比較直覺的一種初始化方式。相比順序初始化而言,亂序初始化就如其名,成員可以不按照順序初始化,而且可以隻初始化部分成員,擴充性較好。linux核心中采用這種方式初始化struct。

  亂序初始化有兩種方式,一種是用點(.)符号,一種是用冒号(:)。方式1是c99标準,方式2是gcc的擴充,強烈建議使用第一種方式。

4、測試程式

Linux下C結構體初始化[總結]
Linux下C結構體初始化[總結]

測試結果如下圖所示:

Linux下C結構體初始化[總結]

繼續閱讀