C語(yǔ)言是如何定義常量的?const定義的算不算是常量?
常見的有這么幾種方式。
首先就是宏定義,使用 define 來定義。
宏的特點(diǎn)就是在預(yù)處理的時(shí)候被替換,比如這個(gè)地方的 SIZE,預(yù)處理后就會(huì)變成數(shù)字 5。
第二種跟宏定義類似,常量也可以在編譯的時(shí)候通過編譯器傳入。
以 gcc 為例,編譯的時(shí)候提供 -D 選項(xiàng),同樣會(huì)在預(yù)處理的時(shí)候替換成相應(yīng)的數(shù)字。
第三種枚舉,使用 enum 關(guān)鍵字。
枚舉的特點(diǎn)是默認(rèn)從 0 開始,逐漸遞增。如果需要大量含義相同的常量,可以考慮使用枚舉。
下面要說的就是 const,定義數(shù)組的時(shí)候,如果數(shù)組的長(zhǎng)度僅僅用 const 來修飾,在編譯的時(shí)候就會(huì)提示錯(cuò)誤。
const修飾的不是常量,屬于只讀變量,這一點(diǎn)在《C專家編程》中也有描述。在一個(gè)符號(hào)前面加上 const 限定符只是表示這個(gè)符號(hào)不能被賦值。
為了解決這個(gè)問題,C23專門引入了新的關(guān)鍵字 constexpr,用 constexpr 修飾的才是真正的常量,不管是用它定義數(shù)組長(zhǎng)度,還是給枚舉賦值都可以。這是個(gè)正兒八經(jīng)的常量。
除了上面幾種,代碼中常見的還有字符串常量,比如這樣的,"helloworld"屬于字符串常量,在代碼運(yùn)行過程中不能修改。
還有沒有其他定義常量的方法,如果有遺漏,歡迎大家在評(píng)論區(qū)補(bǔ)充。
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145598 -
CONST
+關(guān)注
關(guān)注
0文章
45瀏覽量
8764
原文標(biāo)題:const定義的是不是常量
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
瑞薩RA系列FSP庫(kù)開發(fā)實(shí)戰(zhàn)指南之定義傳輸源和目標(biāo)存儲(chǔ)器
const定義的是不是常量
評(píng)論