天天看點

關于遇到C結構體中出現以.開頭的疑惑

在學習過程中,經常看到一些源檔案中有結構體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的問題,初始化的時候指定成員的名字,即使在結構體增加,插入字段的時候代碼也可以正常工作。

也就是說,在聲明定義了結構體後,這個結構體可能有很多成員,而在使用這個結構體進行初始化時,可以不按順序、不全部用到地來進行指派初始化。

(由于之前查過一次然後隔一段時間又忘了,故部落格記錄一波~)

繼續閱讀