看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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} }; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.16.127 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1494042857.A.842.html
kwpn: 要看是放在什麼scope...有local, file, class 05/06 13:12
SeamusBerloz: 我經常用來請編譯器幫我檢查是否有意外變更此值的 05/06 14:32
SeamusBerloz: 狀況,或者在單晶片平台下,請編譯器幫我將此值放在 05/06 14:32
SeamusBerloz: 唯讀記憶空間。 05/06 14:32
SeamusBerloz: 也就是說,存取時空間會指向唯讀區。 05/06 14:34
steve1012: Static 關鍵字不同地方有不同用處 這個看起來應該是要 05/06 15:34
steve1012: 表示宣告的名字的scope限制在這個file 05/06 15:34
steve1012: Define 是巨集不是變數 會失去一些type 的好處 但是在 05/06 15:36
steve1012: 編譯的時候就會被計算出來 所以速度可能較快 另一方面c 05/06 15:36
steve1012: onst 是執行期才知道數值多少的變數 所以速度慢一些 05/06 15:36
steve1012: C++11以後引進constexpr 會盡量在編譯期計算出來 所以 05/06 15:37
steve1012: 大多推薦常數用constexpr. macro有一些缺點 詳情可以 05/06 15:37
steve1012: 自己google 05/06 15:37
steve1012: 其實你可以查define vs const vs constexpr 應該就有 05/06 15:38
steve1012: 很多討論了 05/06 15:38
hunandy14: 使用const可以讓編譯器幫你檢查型別是否正確 05/07 00:41
hunandy14: 沒事 誤會了...會隱式轉換 05/07 00:43
MOONRAKER: 伸手牌當一輩子喔 05/07 11:03
bluesoul: 試試看constexpr 05/08 09:04