找回密码
 注册
搜索
查看: 3480|回复: 20

[讨论] 认为C语言水平不错的进来

[复制链接]
发表于 2010-8-26 09:18:53 | 显示全部楼层 |阅读模式
const  valtile BYTE ucInput=10;

这个语句有问题吗?

如果有,请说明,可以举例说明
发表于 2010-8-27 20:26:29 | 显示全部楼层
const  valtile BYTE ucInput=10;
const定义的变量虽然不允许被修改,但野指针可能会使其改变
点评回复

使用道具 举报

发表于 2010-8-27 15:33:00 | 显示全部楼层
高手高手啊[em01]
点评回复

使用道具 举报

发表于 2010-8-27 14:22:05 | 显示全部楼层
受益匪浅。。。
点评回复

使用道具 举报

 楼主| 发表于 2010-8-27 08:32:44 | 显示全部楼层
LS的,高手啊
点评回复

使用道具 举报

发表于 2010-8-26 23:15:55 | 显示全部楼层
volatile仅仅用来提醒编译器在编译的时候注意这个变量的值是可变的,也就是说在每次去使用这个变量的时候,我们去看汇编代码会发现每次都会去重新从这个变量的地址去重新load它的值。
而const是用来表示我们将这个变量存储哪里,自然const表示你的程序无法再对它进行修改。除非你的系统上运行了另外一个独立的操作系统,而这个系统的存储器映射是可以保证这个系统能修改这个变量所在的存储器地址,这种仅仅出现在多系统共享内存的案例里。另外一种普遍的情况就是硬件会去刷新这个地址,比如只读寄存器。
所以这种语法是完全正确的。
点评回复

使用道具 举报

发表于 2010-8-26 13:07:26 | 显示全部楼层
同意wzhm2002
点评回复

使用道具 举报

发表于 2010-8-26 12:38:30 | 显示全部楼层
volatile
不能优化的意思
点评回复

使用道具 举报

发表于 2010-8-26 11:55:34 | 显示全部楼层
const  volatile BYTE ucInput=10;

语法上没有错误,这种用法一般只会用在只读寄存器上,对于普通的变量一般不会将这两者联合起来用
点评回复

使用道具 举报

 楼主| 发表于 2010-8-26 11:11:39 | 显示全部楼层
以下是引用crystal68在2010-8-26 11:01:42的发言:



给你自己的理解上加个词你就明白了,其它,不做过多解释,你理解的比较全面了。

“CONST是修饰只读变量的,就是说这个变量的值是不允许被__本地程序__改变的."

现在明白了?


你的意思也就是CONST修饰的变量不能被本程序修改,但是可以被硬件或者操作系统等修改?

可有权威的出处?

我所读过的C方面的书籍,好像都只说到CONST修饰只读变量,至于这个变量是否一定不能被改变,都没说。
点评回复

使用道具 举报

 楼主| 发表于 2010-8-26 11:05:29 | 显示全部楼层
网上找的资料


没有问题,被volatile这个关键字修饰的变量在每次访问的时候都要去相应内存地址去找,因为随时可能被修改。被const修饰只能说明这个i不能被程序员修改,但可能被系统所修改

回答者: 小马斗世 - 六级   2010-8-24 17:26

对这个声明的解释是:
因为他实时改变,所以是volatile
因为他在本地不允许修改。。。所以是const

const
有左值可能就是因为要跟volatile搭配的原因 才有的左值吧因为普通的变量,const有左值无意义

const volatile
一个典型就是时间。。。。
计算机的时钟

转自qq群的谈话,呵呵 希望对你有帮助。
点评回复

使用道具 举报

发表于 2010-8-26 11:01:42 | 显示全部楼层
以下是引用hztianxie在2010-8-26 10:30:48的发言:
CONST是修饰只读变量的,就是说这个变量的值是不允许被改变的
但是volatile是修饰那些可被线程或者硬件等很多未知因素修改的,比如寄存器等等,我们一般都要用volatile修饰。这样程序只会去内存中找值,而不是通过编译器优化过的值。


给你自己的理解上加个词你就明白了,其它,不做过多解释,你理解的比较全面了。

“CONST是修饰只读变量的,就是说这个变量的值是不允许被__本地程序__改变的."

现在明白了?
点评回复

使用道具 举报

 楼主| 发表于 2010-8-26 10:45:20 | 显示全部楼层
DEL   F
点评回复

使用道具 举报

 楼主| 发表于 2010-8-26 10:30:48 | 显示全部楼层
我谈谈我的想法

我觉得即对,也不对,当然,我肯定有一种观点是错误的

但是我自己都辩驳不过自己,源于概念不清吧

错误的理由:

CONST是修饰只读变量的,就是说这个变量的值是不允许被改变的
但是volatile是修饰那些可被线程或者硬件等很多未知因素修改的,比如寄存器等等,我们一般都要用volatile修饰。这样程序只会去内存中找值,而不是通过编译器优化过的值。

所以我觉得两者自相矛盾,是不能放在一起修饰一个变量的。


对的理由:
volatile只说可能会被改变,但是我如果一个普通的变量(指不可能被硬件或者操作系统等改变的值),也用这个修饰,那么我觉得这个不可能造成问题的
点评回复

使用道具 举报

发表于 2010-8-26 10:12:42 | 显示全部楼层
语句没问题!
点评回复

使用道具 举报

发表于 2010-8-26 09:45:04 | 显示全部楼层
没问题吧

貌似关键字 valtile 说明在变量
在某些地方可能被修改  具体的 记不清楚了
点评回复

使用道具 举报

发表于 2011-6-28 17:01:04 | 显示全部楼层
都是高手啊[em01]
点评回复

使用道具 举报

发表于 2011-6-27 17:27:46 | 显示全部楼层
谢谢分享
点评回复

使用道具 举报

发表于 2012-2-6 10:57:47 | 显示全部楼层
学到很多,,希望这样的贴多些。
点评回复

使用道具 举报

发表于 2012-2-3 21:02:14 | 显示全部楼层
有没哪位软件大侠想带徒弟的啊,拜师
QQ:303674467
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-25 00:45 , Processed in 0.047096 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表