【发布时间】:2021-10-12 09:31:07
【问题描述】:
这个程序中const关键字有什么用?
#include <stdio.h>
struct x{
int a;
int b;
};
int main()
{
struct x xx;
xx = (const struct x) {0};
xx.a = 10;
printf("%d, %d", xx.a, xx.b);
}
在没有const 关键字的情况下运行时输出没有差异。它在这里有什么意义?
【问题讨论】:
-
const在这里没有任何意义。这就像写(const int)42一样没用。 -
虽然编译、链接和运行这样一个小实验是一个好的开始,但它不会给出最终答案。你需要参考标准。你在那里发现了什么?
-
"不使用 const 关键字运行时输出没有差异。"正确的。这就是(编译时)类型限定符的全部意义:如果它编译,那么应该没有运行时差异(除了潜在的 UB 和编译器优化)。
-
一些非常糟糕的嵌入式系统编译器可能会决定将复合文字放在 RAM 中而不是只读闪存中。这就是在此处键入
const的唯一正当理由 - 例如,假设复合文字被放置在 .bss 中并从那里复制到堆栈变量中。 -
更可能的是,一些困惑的人喜欢到处乱发垃圾邮件
const,比如声明本地函数参数const,即使它们是按值复制的。