struct的亂序初始化–linux核心源碼常用方法

來源:互聯網
上載者:User

    在linux核心源碼裡經常會見到以下這種類型的用法:

  static struct platform_device androidusb_device = {    .name = "android_usb",    .id = -1,    .dev = {      .platform_data = &android_usb_pdata,    },  };

    這裡platform_device是定義好的一個結構題(在kernel/include/linux/platform_device.h中定義),androidusb_device是一個具體的裝置,括弧內的內容為結構提初始化。

platform_device的定義如下:

  struct platform_device {    const char * name;    int id;    struct device dev;    u32 num_resources;    struct resource* resource;    const struct platform_device_id*id_entry;    /* arch specific additions */    struct pdev_archdataarchdata;  };


   從網上搜了一下關於struct的介紹,大部分都只是很淺顯的介紹,有一篇文章不錯,摘取了一部分貼在這裡。

 struct是C中重要的ADT。但是在一般講C的書中,往往只介紹了struct的定義、順序初始化及位域。本文將筆者曾經用到的、看到的知識點羅列出來,與大家分享。(http://hi.baidu.com/cjzswust/blog/item/d1d2191f5ddc481541341711.html)

  為了方便後面的介紹,先定義一個struct類型:

   struct User   {     int id; //id     char name[100]; //user name     char *home; //home directory     int passwd; //password   };

  struct資料有3中初始化方法:順序,C風格及C++風格的亂序。

  1)順序
  這種方法很常見,在一般的介紹C的書中都有介紹。順序初始化的特點是: 按照成員定義的順序,從前到後逐個初始化;允許只初始化部分成員;在被初始化的成員之前,不能有未初始化的成員。

  eg:   struct User oneUser = {10, "Lucy", "/home/Lucy"};  初始化之後,oneUser各個成員的值為:   oneUser.id = 10;   oneUser.name = "Lucy";   oneUser.home = "/home/Lucy";   oneUser.passwd = 0;

  2)亂序(C風格)
  順序的缺陷是必須按成員定義的順序逐個初始化,不能間隔。而亂序的方式則很好的解決了這個問題,因為這種方式是按照成員名進行。

 eg:   struct User oneUser = {     .name = "Lucy",     .id = 10,     .home = "/home/Lucy"   };

  3)亂序(C++風格)
  C++風格的亂序初始化方式跟C風格的一樣,只是它更常用在C++代碼裡。

 eg:   struct User oneUser = {     name:"Lucy",     id:10,     home:"/home/Lucy"   };

  不論是哪種方式,都允許只初始化部分成員;未被初始化的成員預設為0(指標類型的成員預設為NULL)。兩種亂序初始化方法,即可以用在C代碼中,也可以用在C++代碼中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.