C 變數宣告中 const 用法

2021-08-29 16:13:06 字數 2260 閱讀 4674

3. 宣告風格

參考鏈結

這篇譯文。

static unsigned long int *x[n];為例,說明幾個概念

現在可以說,變數宣告語句static unsigned long int *x[n];是由宣告符和說明符來組成的。其中宣告符由操作符和識別符號組成,說明符可以同時含有型別說明符、儲存類說明符等。

所謂的解析順序,我理解分為兩個部分,宣告符說明了是乙個什麼東西,說明符給出了這個東西的一些性質。對宣告符來說,解析順序決定了這個東西屬於什麼大類,什麼小類,說明符不區分順序,給出了這個東西在不同方面的屬性。

可以按照這個規則來決定解析順序:離識別符號id越近,越決定了目標先是什麼,距離相等情況下操作符優先順序越高越先解析。

舉例來說,*x[n]*離識別符號idx的距離相等,按照 c++ 符號優先順序圖表進行解析,的優先順序比*更高,因此宣告符*x[n]表明x是乙個優先於指標的序列,也就是說,它首先是乙個序列,其次序列中的每個元素是乙個指標。如果想要變換解析順序,可以應用()來提高解析級別,例如(*x)[n]表示為乙個指向序列為n的指標。

宣告說明符在乙個宣告中出現的順序並不重要。比如const unsigned static intstatic unsigned int constint const unsigned staticconst int static unsigned,只不過通常大家有一套預設的書寫順序。

能出現在宣告符中的宣告說明符只有constvolatile。當出現在宣告符中時,可以認為其修飾的物件變成了操作符,並且不能交換constvolatile在宣告中的順序(不能交換constvolatile與操作符*的順序)。例如int const *aa宣告為指向const int的指標,而int *const aa宣告為指向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;

const void *vectortable(3)

void const *vectortable(4)

大多數c和c++程式設計師更喜歡把const和volatile寫在其他型別的說明符的左邊,同(3)。而我更喜歡把const和volatile寫在右邊,如(4),而且強烈推薦這樣寫。

[1] const t vs. t const ——dan saks 【翻譯】

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常量有資料型別,而巨集常量沒有資料型別。編...