在學習過程中,經常看到一些源檔案中有結構體struct中的成員是以.開頭的,如:
static struct uart_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,
};
static struct file_operations test_fops = {
.owner = THIS_MODULE,
.open = chrtest_open,
.read = chrtest_read,
.write = chrtest_write,
.release = chrtest_release,
};
然後感覺這種格式很奇怪,查了資料後發現,
這個是C99标準中的結構體初始化方法。
結構體的亂序指派,好像是GCC的擴充
這是一個C的問題,初始化的時候指定成員的名字,即使在結構體增加,插入字段的時候代碼也可以正常工作。
也就是說,在聲明定義了結構體後,這個結構體可能有很多成員,而在使用這個結構體進行初始化時,可以不按順序、不全部用到地來進行指派初始化。
(由于之前查過一次然後隔一段時間又忘了,故部落格記錄一波~)