標籤:style color io 使用 資料 sp 問題 on cti
解讀C的聲明的最好方法是用英語來閱讀,道理很簡單,因為C語言是美國人發明的。
為了把問題變得更簡單,在這裡暫不考慮const和volatile。接下來遵循以下步驟來解釋C的聲明。
- 首先著眼於標識符(變數名或者函數名)。
- 從距離標識符最近的地方開始,依照優先順序解釋衍生類別型(指標、數組、和函數)。優先順序說明如下:
- 用於整理聲明內容的括弧。
- 用於表示數組的[],用於表示函數的()。
- 用於表示指標的*。
- 解釋完成完成衍生類別型,使用“of”、“to”、“returning”將它們串連起來。
- 最後,追加資料類型修飾符(在左邊,int,double等)。
- 英語不好的人,可以倒序用中文解釋。
數組元素個數和函數的參數屬於類型的一部分。應該將它們作為附屬類型的屬性進行解釋。
比如:int (* func_p)(double);
1.首先著眼於標識符。 int (* func_p)(double); 英語的表達為 func_p is
2.因為存在括弧,這裡著眼於*。 int (* func_p)(double); 英語的表達為func_p is pointer to
3.解釋用於函數的(),參數是double。int (* func_p)(double);
英語的表達為:func_p is pointer to function(double) returnning
4.最後解釋資料類型修飾符int。int (* func_p)(double);
英語的表達為:func_p is pointer to function(double) returnning int。
5.最後翻譯成中文:func_p是指向返回int的函數的指標。
根據這樣的步驟,可以解釋任何一個聲明,比如更為複雜的:int atexit(void (*func)(void));
英語的表達為:atexit is function (func is pointer to function(void) returnning to void) returnning int.
翻譯成中文為:atexit 是返回int的函數的(參數是,指向返回void沒有參數的函數指標)
讀書筆記《征服C指標》----C的聲明是這樣解讀的