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

2009-4-14 17:53 2203 4 4 分类: MCU/ 嵌入式

第1章  C:穿越时空的迷雾


●C语言的史前阶段


    C语言源于通用电气、麻省理工和贝尔实验室在1969年合作的一个名为Multics失败的项目。在该项目失败后,研究人员Ken Thompson和Dennis Ritchie用汇编语言编写一个名为UNIX的操作系统。UNIX经过若干次的改写,由最初的汇编改成BCPL语言,再改成B语言、New B语言,到1973年左右采用C语言改写了UNIX系统。


    编译器设计者的金科玉律:效率(几乎)就是一切。


●C语言的早期体验


    数组下标从0开始而不是从1开始;


    C语言的基本数据类型直接与底层硬件相对应;


    auto关键字显然是摆设;


    表达式中的数组名可以看作是指针;


    float被自动扩展为double;


    不允许嵌套函数(函数内部包含另一函数的定义);


    register关键字。使用了register关键字,简化了编译器,却把包袱丢给了程序员。


●标准I/O库和C预处理器


    C语言原先没有定义I/O,而是由库函数提供。后来这实际上成了标准机制。


    C预处理器的3个主要功能:


    字符串替换;


    头文件包含;


    通用代码模板的扩展。对宏这样的预处理器只应该适量使用。


    宏最好只用于命名常量,并为一些适当的结构提供简捷的记法。宏名应该大写,这样很容易与函数调用区分开。千万不要用C预处理器来修改语言的基础结构。


●K&R C


    1978年《C程序设计语言》出版,这个版本的C被成为K&R C。


●今日之ANSI C


    任何学习或者使用C语言的人都应当使用ANSI C,而不是K&R C。


●K&R C和ANSI C之间的区别


    主要分成四类:


    新的、非常不同的、并且很重要的东西。唯一属于这类区别的特性是原型-把形参的类型作为函数声明的一部分。


    新的关键字。ANSI C增加了一些关键字:enum、const、volatile、signed、void。


    原先的有些语言特性依然合法,但意思有了一些轻微的改变。


    最后一类在现实中几乎不可能碰到。


ANSI C中最重要的新特性就是“原型”,这种特性取自C++。原型就是函数声明的扩展,这就允许编译器在参数的使用和声明之间检查一致性。


●容易混淆的const


    关键字const并不能把变量变成常量。在一个符号前加上const限定符只是表示这个符号不能被赋值。也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序内部(甚至是外部)的方法修改这个值。const最有用之处就是用它来限定函数的形参,这样函数将不会修改实参指针所指的数据,但其他的函数却可能会修改它。const和*的组合通常只用于在数组形式的参数中模拟传值调用,它声称“我给你一个指向它的指针,但你不能修改它”。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条