晕~,上大学时学了一年C语言,竟然不知道还有volatile

r00t 2010-01-21 10:03:55
RT,猛然发现自己C语言有多么的菜。
请前辈推荐几本“高级”C语言的书?
谢谢~~
...全文
417 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
gsx018 2012-03-15
  • 打赏
  • 举报
回复
学习,谢谢!
uda1985 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 shellfish567 的回复:]
这个关键词主要用于多线程时,和编译器有关,编译器在编译程序时会自动进行优化,如循环里的i,取自寄存器肯定比内存里快,于是很多编译器认为的关键变量都放在寄存器里。这样就会导致假如开多线程,这个线程里改变了一个变量,另一个线程如果从寄存器中读取的话是读的将是旧的变量,值没有变,于是就会出问题了。
这个关键字的作用是针对编译器的,告诉编译器,不要把这个变量放入寄存器中,每次都去必须从内存中读入寄存器,……
[/Quote]
学习了。
shellfish567 2010-01-22
  • 打赏
  • 举报
回复
这个关键词主要用于多线程时,和编译器有关,编译器在编译程序时会自动进行优化,如循环里的i,取自寄存器肯定比内存里快,于是很多编译器认为的关键变量都放在寄存器里。这样就会导致假如开多线程,这个线程里改变了一个变量,另一个线程如果从寄存器中读取的话是读的将是旧的变量,值没有变,于是就会出问题了。
这个关键字的作用是针对编译器的,告诉编译器,不要把这个变量放入寄存器中,每次都去必须从内存中读入寄存器,这样就可以避免多线程时参数更新问题。
弱弱的说说:我以前去面试的时候,遇到三家公司都有这个问题,valitile,第一个不会。。。第二个不会。。第三个必须得会了
evanxgsh 2010-01-22
  • 打赏
  • 举报
回复
想那么多干干什么,如果你工作需要这个知识,自然就学会了,如果用不上,学过很快就会忘。关键在于不断的学习。
forster 2010-01-22
  • 打赏
  • 举报
回复
auto呢
bladesoft 2010-01-22
  • 打赏
  • 举报
回复
上大学时候不知道很正常,不过这个类型在嵌入式领域用的比较多,我以前面试的时候经常被问到volatile类型。
沭水河畔 2010-01-22
  • 打赏
  • 举报
回复
还有个断言assert,话说9楼的四本书我已经看过两本了,第一本和第四本。第一本尚未看完,等看完之后再拿下第三本。
npngsc 2010-01-22
  • 打赏
  • 举报
回复
不做底层的话,很少用到这个修饰词吧
versaariel 2010-01-22
  • 打赏
  • 举报
回复
我去年才知道。。。。。。。我以前去一家公司面试的时候,他们问我一个自认为很难的难题就是关于volatile的
ba_wang_mao 2010-01-22
  • 打赏
  • 举报
回复
4楼好强大
hlyces 2010-01-22
  • 打赏
  • 举报
回复
惭愧~~
yitaohust 2010-01-22
  • 打赏
  • 举报
回复
很好,学习了。我们大学时,老师也跳过这章节了。
challenge99 2010-01-22
  • 打赏
  • 举报
回复
正常啊,我毕业的时候才知道...
赵4老师 2010-01-22
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言、架构……
a888882008 2010-01-22
  • 打赏
  • 举报
回复
这个关键字,在一般在C语言教科书中很少涉及到,一般编程人员也很少会用到volatile,但是对于嵌入式开发人员来说,这个关键字是很重要的。
volatile 原意是不稳定的,易变的。用此这个关键字修饰变量,表示编译器不应对该变量的读写以及多个volatile变量读写的先后顺序进行优化;对其存取时不能使用寄存器中的备份,每次读必须重新访问相应的内在地址,每次写也须将结果立即回写。
E: volatile int *i = 0x45000000;
int *j = 0x45000000;

*i = 0; // 不被优化*i=0
*i = 1; // 不被优化*i=1
*i = 0; // 不被优化*i=0

*j = 0; //被优化
*j = 1; //被优化
*j = 0; //*j=0
ProgrammerNO1 2010-01-22
  • 打赏
  • 举报
回复
可能是LZ的老师没提到,,呵~~
tan870426 2010-01-22
  • 打赏
  • 举报
回复
不常用的东西
这样的关键字多了吧
很多都不知道
因为不常用
大概只有在面试的时候才会考虑到
  • 打赏
  • 举报
回复
这个貌似我也不知道,太长时间了,忘了
w19881013 2010-01-22
  • 打赏
  • 举报
回复
类和指针~~
  • 打赏
  • 举报
回复
正常现象,别大惊小怪的。
加载更多回复(12)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧