[問題] const 修飾詞使用

作者: XtendaceD (X招待王牌D)   2017-05-06 11:54:15
開發平台(Platform): Keil C
問題(Question):
書(施威銘研究室)上說,在宣告變數的同時,在語法前加一修飾詞 const,
將使宣告的變數質變成無法更改。是除了 #define 的方法外,另一種定義
常數的方式:
const 資料型別 變數名稱 = 初始值;
我想問這有什麼好處 ?
精華區有一段話:
const 的修飾對象是型別
const 規範的是在執行期 (runtime) 決定的常數值
這裡也想請教執行期是什麼意思(真的菜味很重哈),
是program counter開始跳了的時候嗎 ?
還有宣告 const後,能un-const掉去改變數值嗎?
程式碼(Code):
下面是最近前人給的,他說是函數指標的指令集結構。
這邊想問一下 static const 又是什麼意思...謝謝
還有這程式碼有什麼bug或小秘密也請幫忙解說一下
typedef const int (*pEXE_Function)(char *v_pCMD, int v_length);
typedef struct {
const char *v_pCMD; //command string
const EXE_Function pEXE; //command exe function
char iParent;
char id;
} CMD_Format;
static const CMD_Format GPzCMDs[] = {
{"VER", cmdGPzQryConfig, 0, 50},
{"XXX", cmdRouteXXX, 0, 60}
};
作者: kwpn (ITSST)   2017-05-06 13:12:00
要看是放在什麼scope...有local, file, class
作者: SeamusBerloz (軒摩斯)   2017-05-06 14:32:00
我經常用來請編譯器幫我檢查是否有意外變更此值的狀況,或者在單晶片平台下,請編譯器幫我將此值放在唯讀記憶空間。也就是說,存取時空間會指向唯讀區。
作者: steve1012 (steve)   2017-05-06 15:34:00
Static 關鍵字不同地方有不同用處 這個看起來應該是要表示宣告的名字的scope限制在這個fileDefine 是巨集不是變數 會失去一些type 的好處 但是在編譯的時候就會被計算出來 所以速度可能較快 另一方面const 是執行期才知道數值多少的變數 所以速度慢一些C++11以後引進constexpr 會盡量在編譯期計算出來 所以大多推薦常數用constexpr. macro有一些缺點 詳情可以自己google其實你可以查define vs const vs constexpr 應該就有很多討論了
作者: hunandy14 (Charlott.HonG)   2017-05-07 00:41:00
使用const可以讓編譯器幫你檢查型別是否正確沒事 誤會了...會隱式轉換
作者: MOONRAKER (㊣牛鶴鰻毛人)   2017-05-07 11:03:00
伸手牌當一輩子喔
作者: bluesoul (忙死你老爸)   2017-05-08 09:04:00
試試看constexpr

Links booklink

Contact Us: admin [ a t ] ucptt.com