以下示例在我的理解中增加了混乱。我无法理解如何修改const变量本地。请帮助我了解同样的事情。
/* Compile code without optimization option */
// volatile.c
#include <stdio.h>
int main(void)
{
const int local = 10;
int *ptr = (int*) &local;
printf("Initial value of local : %d n", local);
*ptr = 100;
printf("Modified value of local: %d n", local);
return 0;
}
$ gcc volatile.c -o挥发性–save -temps
$ ./volatile
本地的初始值:10
本地的修改值:100
如果我们查看C99草案标准部分6.7.3
type type feolifiers 段落 4 它说:
如果尝试通过使用使用constemifif的类型来修改对象 具有非统一类型的LVALUE的行为是不确定的。如果尝试是 通过使用LVALUE来指代用挥发性合格类型定义的对象 对于非易失性合格类型,该行为是不确定的。 115)
,因此您对结果没有任何期望,也不应该这样做。
如果我们查看段 2 它说:
与合格类型相关的属性仅对表达式有意义 是lvalues。 114)
和脚注114
说:
实现可能将const对象放置在一个不易挥发性的const对象中 贮存。此外,如果无法使用该对象,则实现不必为该对象分配存储。
通常,实现不必制作 const 变量读取,但它可能但可以在R ..指出的是将自动变量放置在只读的内存中很难。