作者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/cn.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