3. 宣告風格
參考鏈結
這篇譯文。
以static unsigned long int *x[n];
為例,說明幾個概念
現在可以說,變數宣告語句static unsigned long int *x[n];
是由宣告符和說明符來組成的。其中宣告符由操作符和識別符號組成,說明符可以同時含有型別說明符、儲存類說明符等。
所謂的解析順序,我理解分為兩個部分,宣告符說明了是乙個什麼東西,說明符給出了這個東西的一些性質。對宣告符來說,解析順序決定了這個東西屬於什麼大類,什麼小類,說明符不區分順序,給出了這個東西在不同方面的屬性。
可以按照這個規則來決定解析順序:離識別符號id越近,越決定了目標先是什麼,距離相等情況下操作符優先順序越高越先解析。
舉例來說,*x[n]
中*
和離識別符號id
x
的距離相等,按照 c++ 符號優先順序圖表進行解析,的優先順序比
*
更高,因此宣告符*x[n]
表明x
是乙個優先於指標的序列,也就是說,它首先是乙個序列,其次序列中的每個元素是乙個指標。如果想要變換解析順序,可以應用()
來提高解析級別,例如(*x)[n]
表示為乙個指向序列為n
的指標。
宣告說明符在乙個宣告中出現的順序並不重要。比如const unsigned static int
、static unsigned int const
、int const unsigned static
、const int static unsigned
,只不過通常大家有一套預設的書寫順序。
能出現在宣告符中的宣告說明符只有const
和volatile
。當出現在宣告符中時,可以認為其修飾的物件變成了操作符,並且不能交換const
或volatile
在宣告中的順序(不能交換const
或volatile
與操作符*
的順序)。例如int const *a
把a
宣告為指向const int
的指標,而int *const a
把a
宣告為指向int
的 const 指標。
c++基本上是按從頭到尾、從左到右的順序來讀,但是指標的宣告,從某種意義來講卻是倒著的。指標的宣告是從右到左來看。把按照我自己的理解,可以按照先確定是什麼東西(宣告符),再看這個東西的性質(說明符)順序來確定。const
放在其他型別說明符的右邊,可以嚴格的從右到左來看指標宣告,還可以把const
從「右邊的」位置提出來,如:
t const *p
;把
p
宣告為「指向const t
的指標」,非常準確,同樣:
t *const p
;把
p
宣告為「指向t
的 const 指標」,也能正確的理解。
以上面例子來說,t const *p
先確定是乙個指標,再看這個指標是關於const t
型別的,也就是「指向const t
的指標」;t *const p
先確定時乙個 const 指標,再看這個 const 指標是關於t
型別的,也就是「指向t
的 const 指標」。
const int* p
;而不是
const int *p
;
[1] const t vs. t const ——dan saks 【翻譯】const void *vectortable
(3)
void const *vectortable
(4)大多數c和c++程式設計師更喜歡把const和volatile寫在其他型別的說明符的左邊,同(3)。而我更喜歡把const和volatile寫在右邊,如(4),而且強烈推薦這樣寫。
C 變數宣告(extern用法總結)
變數宣告向編譯器保證變數以給定的型別和名稱存在,這樣編譯器在不需要知道變數完整細節的情況下也能繼續進一步的編譯。變數宣告只在編譯時有它的意義,在程式連線時編譯器需要實際的變數宣告。當使用多個檔案且只在其中乙個檔案中定義變數時 定義變數的檔案在程式連線時是可用的 變數宣告就顯得非常有用。您可以使用ex...
C 中const用法總結
c 中用法總結 1.1.1.定義普通常量 使用 define來定義常量也是常用方法,但const也可以用來定義常量,在 effective c 中建議使用const代替 define來定義常量,因為const定義的常量具有型別資訊,而巨集沒有,所以使用const定義的常量在進行賦值操作時編譯器會進行...
C 中 Const用法小結
c 中const用法小結 關於c 中的const關鍵字的用法非常靈活,而使用const將大大改善程式的健壯性,參考了康建東兄的const使用詳解一文,對其中進行了一些補充,寫下了本文。1.const常量,如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編...