[问题] 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