2009年12月1日 星期二

進階的 C struct 用法

這幾天在trace linux code的時候發現一個有趣的struct initialization的方法,
假設struct是定義為

struct sched_param {
/* ... */
int sched_priority;
/* ... */
};


那麼一般來說,初始化的方式是先宣告一個struct sched_param變數,
然後再用dot運算子去存取內部成員並賦予值,如下

struct sched_param sp1;
sp1.sched_param = 1;


那看到一個進階的方式是以集合的概念去處理struct的initialization

struct sched_param sp2 = {
.sched_priority = 1
};


在上述的語法中,(.) dot運算子可以抓到struct內的成員
若是struct內有多個成員的話,只需要用(,) 逗點分開即可
給值順序可以不用按照定義內的先後順序

PS.
這是GNU牛頭牌gcc的延伸C語法,非標準C語法
在它牌 c compiler 上要注意能否使用

[Reference]
http://linuxprograms.wordpress.com/2008/03/07/c-structure-initialization-advanced/

沒有留言:

張貼留言