社区导航

 

搜索
查看: 29|回复: 0
打印 上一主题 下一主题

[资料分享] KEIL C51中const和code的使用

[复制链接]

5762

TA的帖子

19

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2019-12-4 21:45 | 只看该作者 |倒序浏览 |阅读模式

code是KEIL C51 扩展的关键字,用code修饰的变量将会被放到CODE区里。但C语里的const关键字好像也有定义不能改变的变量的功能,这两个关键字有什么区别呢?
在帮助手册里查找const,可以找到以下的描述
1 Variables declared with the const type qualifier alone are stored in the memory area (data, idata, xdata, and so on) associated with their definition. 
2 Variables you want to locate in ROM must be declared with the code memory type.
意思应该是:用CONST修饰修饰的变量放在RAM里了,但你不能改它。用CODE修饰符修饰的变量放在FLASH里了

it is possible to assign the address of a const object (mask) to a non-const pointer (p) and subsequently use the pointer to change the const object. In this case, the compiler does generate code to write to the const object. The effects of this code is undefined and may or may not work as expected
  可以用一个非COSNT的指针指向一个CONST变量,并且可以使用这个指针指向的变量。编译器不会产生错误,但此时程序的运行结果是不可以预测的。
  根据上面说的,const关键字在C51里的作用是弱的,所以基上应该用不到。不止是C51,一般的C也一样。可以试一下,这个程序半个警告都没有,但是运行结果是1。

#include <stdio。h> #include <stdlib。h> int main(void) { const int a = 2; int *p; p = (int *)(&a); *p = 1; printf("%d\n", a); return 0; }



您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /8 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( )

GMT+8, 2019-12-9 03:05 , Processed in 0.079755 second(s), 17 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表
pk10机器人 永利赛车机器人 彩票大赢家 pk10机器人 送彩金500的网站大白菜不看id 欢乐谷送彩金活动 微信pk10算账机器人 易迅彩票送彩金 送彩金500的网站大白菜不看id 百家乐免费送彩金