在学习过程中,经常看到一些源文件中有结构体struct中的成员是以.开头的,如:
staticstructuart_ops sw_uart_ops={.tx_empty=sw_uart_tx_empty,.set_mctrl=sw_uart_set_mctrl,.get_mctrl=sw_uart_get_mctrl,.stop_tx=sw_uart_stop_tx,.start_tx=sw_uart_start_tx,.stop_rx=sw_uart_stop_rx,.enable_ms=sw_uart_enable_ms,.break_ctl=sw_uart_break_ctl,.startup=sw_uart_startup,.shutdown=sw_uart_shutdown,.flush_buffer=sw_uart_flush_buffer,.set_termios=sw_uart_set_termios,.type=sw_uart_type,.release_port=sw_uart_release_port,.request_port=sw_uart_request_port,.config_port=sw_uart_config_port,.verify_port=sw_uart_verify_port,.pm=sw_uart_pm,};
staticstructfile_operations test_fops={.owner=THIS_MODULE,.open=chrtest_open,.read=chrtest_read,.write=chrtest_write,.release=chrtest_release,};
然后感觉这种格式很奇怪,查了资料后发现,
这个是C99标准中的结构体初始化方法。
结构体的乱序赋值,好像是GCC的扩展
这是一个C的问题,初始化的时候指定成员的名字,即使在结构体增加,插入字段的时候代码也可以正常工作。
也就是说,在声明定义了结构体后,这个结构体可能有很多成员,而在使用这个结构体进行初始化时,可以不按顺序、不全部用到地来进行赋值初始化。
(由于之前查过一次然后隔一段时间又忘了,故博客记录一波~)
网友评论