资源描述:
《GNUC标记化结构初始化语法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Mythfounder整理GNUC标记化结构初始化语法一-结构体成员前加小数点对结构体[cpp]viewplciincopyprint?1.strueta{2.2.intb;4.3.intc;6.4.}有几种初始化方式:[cpp]viewplciincopyprint?1.struetaal={2..b=1,3..c二24.};或者[cpp]viewplaincopyprint?1.structaal={2.b:l,3.c:24.}或者[cpp]viewplaincopyprint?1.struetaal={1,2};内核喜欢用第
2、一种,使用第一种和第二种时,成员初始化顺序可变。标记化结构初始化语法在Linux2.6内核中对结构体的定义形式发生了变化,不再支持原來的定义形式。[cpp]viewplaincopyprint?1.1staticstructttyoperationsuartops=1.2{2.3.open=uart_open,//串口打开3.4.close=uart_close,//串口关闭4.5.write=uart_write,//串口发送6-6•put_char=uart_put_char,//…7.7•flush_chars=uart_f
3、lush_chars,8.8.write_room=uarwrite_room,9.9•chars_in_buffer=uart_chars_in_buffer,10.10.flush_buffer二uart_flush_buffer,11.11.ioctl=uart_ioctl,12.12•throttle=uart_throttle,13.13•unthrottlc=uartunthrottlc,14.14•sendxchar=uartsendxchar,15.15•set_termios二uart_set_termios,1
4、6.16•stop=uart_stop,17.17•start二uart_start,18.18•hangup=uart.hangup,19.19•breakctl二uart_breakctl,20.20.wait_until_sent=uart_wait_until_sent,21.21ttifdefCONFIG_PROC_FS22.22.read_proc=uart_read_proc,//proc入口读函数23.23#endif24.24•tioemget二uart_tioemget,25.25•tioemset二uart_
5、tiocmset,26.26};这个声明采用了标记化结构初始化语法。这种场法是值得采用的,因为它使驱动程序在结构的定义发生变化时更具有可移植性,并且使代码更加紧凑且易读。标记化的初始化方法允许对结构成员进行重新排列。在某些场合下,将频繁被访问的成员放在相同的硬件缓存行上,将大大提高性能。——LLD3标记化结构初始化语法是ISOC99的用法CPrimerPlus第五版相关章节:己知一个结构,定义如下:[epp]viewplaincopyprint?1.struetbook1.{2.chartitle[MAXTITL];3.chara
6、uthor[MAXAUTL];4.floatvalue;5.};C99支持结构的指定初始化项目,其语法与数组的指定初始化项目近似。只是,结构的指定初始化项目使用点运算符和成员名(而不是方括号和索引值)来标识具体的元素。例如,只初始化book结构的成员vlaue,可以这样做:[cpp]viewplaincopyprint?1.structbooksurprise={・value=10.99};可以按照任意的顺序使用指定初始化项目:[cpp]viewplaincopyprint?1.structbookgift={2.2..value
7、=25.99,3..author=z/JamesBroadfool",4..title二〃RuefortheToad"5.};正像数组一样,跟在一个指定初始化项目之后的常规初始化项目为跟在指定成员后的成员提供了初始值。另外,对特定成员的最后一次赋值是它实际获得的值。例如,考虑如下声明:[cpp]viewplaincopyprint?1.struetbookgift={2.2..value=18.90,3..author二zzPhilionnapestle",4.0.255.};这将把值0.25赋给成员vlauc,因为它在结构声明屮
8、紧跟在author成员Z后。新的值0.25代替了早先的赋值18.90o有关designatedinitializer的进一步信息可以参考C99标准的6.7.8节Tnitiali^ation。代码举例:[cpp]vicwplaincopyprint?