- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
下面共25题,每道题4分,满分100分,测试时间1小时,80分及以上为及格。这些题仅用来自测C语言基础,恕不提供答案。
如果能在1小时内完成,并且得分在80以上,可将您的简历发送至:spac502@163.com,我们将尽快安排您面试。
面试分三部分:先是笔试、机试,合格后是项目主管人员的面试。
?希望您能独立完成测试,合理评估自己的C语言基础,以免面试浪费您宝贵的时间!
static有什么用途?(请至少说明两种)
1.限制变量的作用域
2.设置变量的存储域
在C语言中,关键字static有三个明显的作用:
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
本地化数据和代码范围的好处和重要性
关键字const有什么含意?
关键字volatile有什么含意?并举出不同的例子?
关键字volatile有什么含意?并给出三个不同的例子
.
分类: C/C++2010-06-11 14:03718人阅读评论(6)收藏举报
编译器多线程variables嵌入式buffer面试
关键字volatile有什么含意?并给出三个不同的例子。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
下面是volatile变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。
1). 一个参数既可以是const还可以是volatile吗?解释为什么。
2). 一个指针可以是volatile 吗?解释为什么。
3). 下面的函数有什么错误:
int square(volatile int *ptr) {
return *ptr * *ptr;
}
下面是答案:
1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
3). 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:
int square(volatile int *ptr) {
int a,b;
a = *ptr;
b = *ptr;
return a * b;
}
由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!
正确的代码如下:
long square(volatile int *ptr) {
int a;
a = *ptr;
return a * a;
}
Volatile 关键字告诉编译器不要持有变量的临时性拷贝。一般用在多线程程序中,以避免在其中一个线程操作该变量时,将其拷贝入寄存器。
请看以下情形: A线程将变量复制入寄存器,然后进入循环,反复检测寄存器的值是否满足一定条件(它期待B线程改变变量的值。
在此种情况下,当B线程改变了变量的值时,已改变的值对其在寄存器的值没有影响。所以A线程进入死循环。
volatile 就是在此种情况下使用。
更多 2
上一篇:使用map实现单词转换的程序
下一篇:sleep和wait的区别
.
分别写出bool、int和float类型变量与“零值”比较的if语句。
零值比较--BOOL,int,float,指针变量与零值比较的if语句
零值比较--BOOL,
您可能关注的文档
- C语言上机试题及答案1..doc
- C语言与数据结构试题及答案..doc
- C语言习题(前五章)参考答案..doc
- C语言习题1-7答案..doc
- C语言习题1及其答案..doc
- C语言习题七参考答案..doc
- C语言习题五参考答案..doc
- C语言习题答案-5..doc
- c语言习题答案..doc
- C语言习题级答案1..doc
- 党组书记2024年度专题民主生活会对照检查材料(四个带头).docx
- 机关事务局党组书记2024年个人述职述责述廉报告.docx
- 县委常委班子2023年度民主生活会暨从典型案件中汲取教训做好以案促改专题民主生活会整改落实情况报告.docx
- 2025年文献检索与利用复习精华题库及解题技巧大全.doc
- 公司干部2024年度个人述职述责述廉报告.docx
- 在2025年全市创先争优活动总结表彰大会上的讲话.docx
- 部领导班子2024年度民主生活会对照检查材料.docx
- XX国有企业党委书记述职述廉工作情况报告.docx
- 领导班子2024年专题民主生活会照检查材料(四个带头).docx
- 某市委书记2024年度民主生活会对照检查材料(含反面案例剖析).docx
文档评论(0)