C語言是如何定義常量的?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語言
+關(guān)注
關(guān)注
180文章
7615瀏覽量
137827 -
CONST
+關(guān)注
關(guān)注
0文章
45瀏覽量
8193
原文標(biāo)題:const定義的是不是常量
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
ADS1281是不是不能使用sync引腳進(jìn)行同步?
揭秘貼片功率電感發(fā)燙究竟是不是燒壞了
技術(shù)干貨驛站 ▏深入理解C語言:掌握常量,讓你的代碼更加穩(wěn)固高效!
![技術(shù)干貨驛站 ▏深入理解C語言:掌握<b class='flag-5'>常量</b>,讓你的代碼更加穩(wěn)固高效!](https://file1.elecfans.com/web2/M00/04/91/wKgZombQEsqAKB70AAAi0VIqEDo129.png)
__disable_irq()和__enable_irq()函數(shù)的具體定義
![__disable_irq()和__enable_irq()函數(shù)的具體<b class='flag-5'>定義</b>](https://file1.elecfans.com/web2/M00/04/88/wKgZombP18aAKIgJAACAC6ifUtA639.png)
請(qǐng)問Mesh網(wǎng)絡(luò)是不是只能連接官方Espressif Cloud?
谷景告訴你屏蔽繞線功率電感是不是感量越大性能越好
微波檢測(cè)的關(guān)鍵物理常量是指
STM32H750VB是不是無法支持SDRAM?
谷景揭秘貼片疊層電感精度是不是越高越好
STM8S使用STVD是不是要預(yù)定義 _CSMC_ ?若不定義對(duì)程序有什么影響?
LabVIEW里Ring自定義控件,其常量無法保持同步修改,如何解決
RC522寫塊操作是不是有什么限制?
STM32F407在const絕對(duì)定位數(shù)組后,復(fù)位后運(yùn)行不正常是怎么回事?
一文看懂插件環(huán)形電感線圈究竟是不是隨便繞的
![一文看懂插件環(huán)形電感線圈究竟<b class='flag-5'>是不是</b>隨便繞的](https://file1.elecfans.com//web2/M00/C3/E0/wKgZomXvEVCAHAw-AABRcrePJbw02.webp)
評(píng)論