C語(yǔ)言的博大精深之數組和結構體的賦值操作
但最近在看關(guān)于隊列調度的內核實(shí)現代碼時(shí),發(fā)現如下奇怪的賦值語(yǔ)句。(具體程序見(jiàn)linux-2.6.8:net/core/Rtnetlink.c的539行)
- #defineRTM_MAX(RTM_BASE+47)
- #defineRTM_GETLINK(RTM_BASE+2)
- structrtnetlink_link
- {
- int(*doit)(structsk_buff*,structnlmsghdr*,void*attr);
- int(*dumpit)(structsk_buff*,structnetlink_callback*cb);
- };
- staticstructrtnetlink_link link_rtnetlink_table[RTM_MAX-RTM_BASE+1]=
- //RTM_MAX-RTM_BASE+1=48
- {
- [RTM_GETLINK-RTM_BASE]={.dumpit=rtnetlink_dump_ifinfo},
- [RTM_SETLINK-RTM_BASE]={.doit=do_setlink},
- [RTM_GETADDR-RTM_BASE]={.dumpit=rtnetlink_dump_all},
- [RTM_GETROUTE-RTM_BASE]={.dumpit=rtnetlink_dump_all},
- [RTM_NEWNEIGH-RTM_BASE]={.doit=neigh_add},
- [RTM_DELNEIGH-RTM_BASE]={.doit=neigh_delete},
- [RTM_GETNEIGH-RTM_BASE]={.dumpit=neigh_dump_info}
- };
上面這段賦值語(yǔ)句第一次見(jiàn)到??戳薔久后,我才明白這個(gè)賦值語(yǔ)句的含義,原來(lái)C語(yǔ)言還可以這樣賦值哦
說(shuō)明:上面這段賦值語(yǔ)句有兩個(gè)需要注意的地方。
1,[RTM_GETLINK - RTM_BASE] = { .dumpit = rtnetlink_dump_ifinfo }, 這條說(shuō)明C語(yǔ)言在數組賦值時(shí),可以專(zhuān)門(mén)對第幾個(gè)元素進(jìn)行賦值。此例中等于[2]={...},即對第二個(gè)元素賦值。
2, { .dumpit = rtnetlink_dump_ifinfo },說(shuō)明,在結構體賦值中,也可以對某個(gè)特定的結構體成員進(jìn)行單獨的賦值。
評論