作者XtendaceD (X招待王牌D)
看板C_and_CPP
標題[問題] const 修飾詞使用
時間Sat May 6 11:54:15 2017
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1494042857.A.842.html
1F:推 kwpn: 要看是放在什麼scope...有local, file, class 05/06 13:12
2F:推 SeamusBerloz: 我經常用來請編譯器幫我檢查是否有意外變更此值的 05/06 14:32
3F:→ SeamusBerloz: 狀況,或者在單晶片平台下,請編譯器幫我將此值放在 05/06 14:32
4F:→ SeamusBerloz: 唯讀記憶空間。 05/06 14:32
5F:推 SeamusBerloz: 也就是說,存取時空間會指向唯讀區。 05/06 14:34
6F:推 steve1012: Static 關鍵字不同地方有不同用處 這個看起來應該是要 05/06 15:34
7F:→ steve1012: 表示宣告的名字的scope限制在這個file 05/06 15:34
8F:推 steve1012: Define 是巨集不是變數 會失去一些type 的好處 但是在 05/06 15:36
9F:→ steve1012: 編譯的時候就會被計算出來 所以速度可能較快 另一方面c 05/06 15:36
10F:→ steve1012: onst 是執行期才知道數值多少的變數 所以速度慢一些 05/06 15:36
11F:推 steve1012: C++11以後引進constexpr 會盡量在編譯期計算出來 所以 05/06 15:37
12F:→ steve1012: 大多推薦常數用constexpr. macro有一些缺點 詳情可以 05/06 15:37
13F:→ steve1012: 自己google 05/06 15:37
14F:→ steve1012: 其實你可以查define vs const vs constexpr 應該就有 05/06 15:38
15F:→ steve1012: 很多討論了 05/06 15:38
16F:→ hunandy14: 使用const可以讓編譯器幫你檢查型別是否正確 05/07 00:41
17F:→ hunandy14: 沒事 誤會了...會隱式轉換 05/07 00:43
18F:噓 MOONRAKER: 伸手牌當一輩子喔 05/07 11:03
19F:→ bluesoul: 試試看constexpr 05/08 09:04