|
楼主
查看: 5669回复: 0
发表于 2019-6-24 16:24:31
只看该作者
C语言是一种适用范围广泛的语言,最早的C语言主要客户是那些编译器设计者,在这个帖子里我将向大家介绍C语言的几个语言特性,当然正是因为上述原因,C语言的语言特性是根据编译器设计者的思路而发展形成的。接下来我将为一些小白科普一下这方面的知识。
C语言的几个语言特性:
1、数组下表从0而不是1开始。绝大多数人习惯从1而不是0开始计数。编译器设计这则选择从0开始,因为偏移量的概念在他们心中已经根深蒂固。但这种设计让一般人觉得很别扭。景观我们定义了一个数组a[100],你可千万别忘a[100]里储存数据,因为这个数组的合法范围是从a[0]到a[99]。
2、 C语言的基本数据类型直接与底层硬件相对应。例如,不想Fortran,C语言中不存在内置的复述类型。某种语言要露宿如果底层硬件没有提供直接的支持,那么编译器设计者就不会在它上面浪费任何精力。C语言一开始并不支持浮点类型,知道硬件系统能够直接支持浮点数之后才增加了对它的支持。
3、 auto关键字显然是摆设。这个关键字只对创建符号表入口的编译器设计者有意义。它的意思是"在进入程序块是自动进行内存分配"(与全局静态分配或在堆上动态分配相反)。其他程序员不必操心auto这个关键字,它是缺省的变量内存分配模式。
4、 表达式中的数组名可以看作是指针。把数组当做指针,简化了很多的东西。我们不在需要一种复杂的机制区分它们,把它们传递到一个函数时不必忍受必须复制所有数组内容的低效率。不过,数组和指针并不是在任何情况下都是等效的。
5、 float呗总动拓展为bouble。尽管ANSI C中情况不在如此,但最初浮点数敞亮的精度都是bouble型的,所有表达式中float变量总被自动转换成bouble。这样做的理由从未公诸于众,但它与PDP-11浮点输的硬件表示方式有关。首先,在PDP-11或VAX中,从float转换到double代价非常小,只要在后面增加一个每个位均为0的字即可。如果要转换回来,去掉第二个字就可以了,要知道在某些PDP-11的浮点数硬件表示行驶中有一个运算模式位(mode bit),你就可以正经性float的运算,也可以只进行double的运算,但如果想在这两种方式间进行切换,就必须修改这个位来改变运算模式。在早期的UNIK程序中folat用的不是太多,所以把运算模式固定位double是比较方便的,省得编译器设计者与跟踪它的变化。
6、不允许嵌套函数(函数内部包含另一个函数的定义)。这简化了编译器,并稍微提高了C语言的运动时阻值结构。
7、register关键字。这个关键字能给编译器设计者提供线索,就是程序中的那些变量属于热门(经常被使用),这样就可以把它们存放到寄存器中。这个设计可以说是一个师傅,如果让编译器在使用各个变量时自动处理寄存器的分配工作,显然比一经声明就把这类变量在生命期内始终保留在七寄存器里要好。使用register关键字,简化了编译器,却把包袱丢给了程序员。
C语言是一门进化过程很长的比哪一语言,最早的C编译器出现在约50年前了,但是它对直接由硬件支持的底层操作的强调,带来了极高的效率和一致性,成为广为应用的编程语言。希望大家能够递进学习好这门课程,以此为根基,软件之路定会越走越远、越走越轻松。
最后希望大家能够点赞、喂食赫兹币哦!
|
|