亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C語言中#define和const疑惑

C語言中#define和const疑惑

FFIVE 2019-04-14 11:21:57
#defineA50constintB=40;staticintarray[A];//正確staticintarray2[B];//錯誤constintC=2*A;//正確constintD=2*B;//錯誤intmain(){}疑惑const定義常量是不是發生在編譯時,所以在程序預處理階段不能對數組大小進行初始化或者對值進行初始化,而#define宏發生在預處理階段,可以用實體對數組大小初始化時出現的宏進行宏展開。我這樣理解對嗎望更詳細的補充
查看完整描述

2 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

你理解的是正確的。
define這個是預處理命令,編譯器會自動展開。在編譯器進行編譯的時候,intarray[A]已經被預處理展開成intarray[50]了。
而被const修飾的變量還是變量,只是這個變量放在一個只讀的數據段里面。另外,在預處理階段不能對數組大小進行初始化是不完全對的。如果說你使用gcc編譯器的話,像inta=255;charb[a];這樣是可以通過編譯的。
                            
查看完整回答
反對 回復 2019-04-14
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

define只是簡單的替換,在編譯前就完成所有替換。
const只是修飾符相當于權限限制符,表明在程序運行時這個值是常量,但是在c和c++中處理都不一樣,c中const只是簡單的告訴編譯器這是常量,但是在后面的使用中還是可以隱式修改。而c++中的const則在程序中始終都是常量,不可以被隱式修改!
                            
查看完整回答
反對 回復 2019-04-14
  • 2 回答
  • 0 關注
  • 525 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號