分析编译器对C关键字的处理『跳过编译器的语法检查,完成很危险的操作』

本文探讨了C语言中const关键字的作用,即声明不可修改的值。通过实验展示了如何在编译器允许的情况下,绕过const约束直接修改内存中的值。分析汇编代码后发现,编译器在某些情况下会将const变量的值直接替换为初始化值,类似于宏定义,从而避免从内存取值。
摘要由CSDN通过智能技术生成

在c中const这个关键字,维基给出这样一句话
When applied in an object declaration,[b] it indicates that the object is a constant: its value does not change, unlike a variable. This basic use – to declare constants – has parallels in many other languages

实际就是用于不允许修改其值的,但是这里需要思考的就是,不允许修改的a的值还是内存里的值,如果非要修改内存里的值怎么办?cpu只认识0101,编译器是如何完成const的功能的,下面通过实验分析一下,(实验平台64位win7,vs2008)

初始代码

int main()
{
 int b,c;
 const int a=10;
  c=1; 
 return 0;
}

很常见,如果
a=11;首先编译不通过,这是c语法就不允许的。
看看此时a对应的内存里面的值,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值