原创 嵌入式微控制器C语言学习笔记19-《C 专家编程》第2章

2009-4-19 17:31 1869 4 6 分类: MCU/ 嵌入式

第2章  这不是Bug,而是语言特性


    语言的细节决定了一种语言到底是可靠的还是容易滋生错误的。
    C语言是一门神奇的编程语言,具有许多优点,不过在欣赏C语言的优点是也不要忘了分析它的缺陷。


    ●多做之过
    语言中存在某些不应该存在的特性。
    switch存在其中一个问题就是,它对case可能出现的值太过放纵了。switch的另一个问题是它内部任


何语句都可以加上标签,并在执行时跳转到那里,这就有可能破坏程序流的结构化。也许switch语句最大


的缺点是它不会在每个case标签后面的语句执行完毕后自动停止。
    “fall through”的意思:如果case语句后面不加break,就依次执行下去。多数情况下,为避免此


缺省行为而不得不加上一条额外的break语句来改变。
    ANSI C引入了一个新特性:相邻字符串常量将被自动合并成一个字符串的约定。这种自动合并意味着


字符串数组在初始化时,如果不小心漏掉了一个逗号,编译器将不会发出错误信息,而是悄无声息地把两


个字符串合并在一起。
    软件对象在大多数情况下应该缺省地采用有限可见性。当程序员需要让它全局可见时,应该采用显式


的手段。
    ●误做之过
    语言中有误导性质或不适当的特性。
C语言存在的一个问题就是它太简洁了,仅增加、修改或删除一个字符就会使原先的程序变成另外一个仍


然有效却全然不同的意义。许多符号在不同的上下文环境里有不同的意义。
    C语言有些运算符存在错误的优先级:当按照常规方式使用时可能引起误会的运算符。建议在C语言中


牢记两个优先级就够了:乘法和除法先于加法和减法,在涉及其它的操作符时一律加上括号。
    ●少做之过
    语言应该提供但未能提供的特性,如标准参数处理以及把lint程序错误地从编译器分离出来。


    许多操作系统能够在程序中区分运行是选项和其它参数,但UNIX却不能,ANSI C也不能。


    在C语言中,空格可能从根本上改变程序的意思或有效性。


    在C语言中,自动变量在堆栈中分配内存。当包含自动变量的函数或代码块退出时,它们所占用的内存便被回收,它们的内容肯定会下一个所调用的函数覆盖。
    Lint程序是软件的道德准则。当你做错事时,它会告诉你哪里不对。应该始终使用Lint程序,按照它的道德准则办事。

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

tengjingshu_112148725 2009-4-19 00:39

底板

用户184981 2009-4-18 13:22

第2张沙发

tengjingshu_112148725 2009-4-18 10:44

沙发
相关推荐阅读
用户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...
EE直播间
更多
我要评论
3
4
关闭 站长推荐上一条 /3 下一条