原创 嵌入式微控制器C语言学习笔记12-《C陷阱与缺陷》第1章

2009-4-2 10:47 2023 2 3 分类: MCU/ 嵌入式

第1章  词法“陷阱”


        程序中的单个字符孤立来看没有什么意义,只有结合上下文才有意义。


        “符号”指的是程序的一个基本组成单元,其作用相当于一个句子中的单词。


        同一组字符序列在不同的上下文环境中可能表示不同的符号。


        C语言中,符号之间的空白(包括空格符、制表符或换行符)将被忽略。


        ●=不同于==


        C语言使用符号=作为赋值运算,符号==作为比较。实际编程中可能会混淆两个符号,造成程序出错。


        ●&和|不同于&&和||


        将按位运算符&与逻辑运算符&&,或者按位运算符|与逻辑运算符||混淆,也是很容易犯的错误。


        ●词法分析中的贪心法


        C编译器读入字符的规则:每一个符号应该包含尽可能多的字符。也就是将字符从左到右一个一个地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。这个处理策略被称为“贪心法”或“大嘴法”。


        注意:除了字符串与字符常量,符号的中间不能嵌有空白(包括空格符、制表符或换行符)。


        ●整型常量


        如果一个整型常量的第一个字符是数字0,将被视作8进制数,实际编程中可能无意中将十进制数写成了八进制数。


        ●字符与字符串


        用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。


        用双引号引起的字符串,代表的却是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制值为零的字符'\0'初始化。


        所以单引号和双引号含义不同,在某些情况下容易将两者弄混,造成程序出错。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2009-4-2 09:29

一直看你的总结:)
相关推荐阅读
用户518079 2011-05-14 00:13
嵌入式系统与FPGA的最新动向
嵌入式处理器:2011年有望增长12%,中国设计增幅高于全球   据Semico Reserch资深分析师Tony Massimini介绍[1],2010年,微逻辑组件(微处理器、微控制器和DSP)的...
用户518079 2011-05-14 00:11
苹果-三星的合作关系变质
苹果公司和三星公司一度曾是非常紧密的合作关系,不过现在,这两家公司却闹了起来,此举将较大幅度的降低三星公司市场份额。据报道,2010年苹果公司在三星订购了数量惊人的DRAM,NAND闪存以及其他半导...
用户518079 2011-05-14 00:10
英特尔3D晶体管引发的震动:ARM继续打低功耗牌么?
这两日,半导体产业界被一个消息所震撼:英特尔宣布自己将彻底告别传统的平面晶体管,只身进入一个3D架构、22nm制程的新纪元——这个芯片巨人新推出的处理器(代号Ivy Bridge),将由其自行研发的3...
用户518079 2010-12-19 22:00
经典回复!
( 我靠 ! )此回复虽有且仅有两个字,却深刻地表达了回复人的深深的祝福与刻骨的情感,可谓言简意赅,一字千金,字字扣人心弦,字字催人泪下,足可见回复人扎实的文字功底和信手拈来的写作技巧及惨绝人环的创新...
用户518079 2010-08-13 12:13
实例说明PID(转)
PID实指“比例proportional”、“积分integral”、“微分derivative”,如果我们要求被控制的对象最终趋于一个稳定的结果,一般就可以使用PID算法。假设说,有一辆速度为1m/...
用户518079 2010-08-13 12:06
延迟实现八位的PWM
八位的PWM:unsigned char i;while(1){        P1^1 = 1;        delay(i);        P1^1 = 0;        delay(256...
我要评论
1
2
关闭 站长推荐上一条 /3 下一条