zoukankan      html  css  js  c++  java
  • C语言概述

      语言是一种通用的程序设计语言。它与UNIX系统之间具有非常密切的联系,UNIX系统本身和系统上运行的大部分程序都是用C语言编写的,但是C语言并不受限于任何一种操作系统或机器。由于C语言很适合用来编写编译器和操作系统,因此被称为“系统编程语言”,但它同样适合编写用于不同领域中的大多数程序。

      C语言很多重要的概念来源于BCPL语言。BCPL对于C语言的影响间接的来自于B语言,它是肯.汤普逊为第一个UNIX系统而于1970年在DEC PDP-7计算机上开发的。

      BCPL和B语言都无类型的语言。相比较而言,C语言提供了很多数据类型。其基本类型包括字符具有多种长度的整型和浮点型。另外,还有通过指针、数组、结构和联合派生的各种数据类型。

       表达式由去运算符和操作数组成。任何一个表达式,包括赋值表达式或函数调用表达式,都可以是一个语句。指针提供了与具体机器无关的地址运算符。

      C语言为实现结构良好的程序,提供了基本的流程控制语句:语句组、条件判断、多路选择、终止测试在顶部的循环、终止测试在底部的循环、提前跳出循环、跳转到循环尾、绝对跳转等。

      函数可以返回基本类型、结构、联合、或指针类型的值。任何函数都可以递归调用。局部变量通常是“自动的”,即在每次函数调用时重新创建。函数定义可以不是嵌套的,但可以用块结构的方式声明变量。一个C语言程序的不同函数可以出现在多个单独编译的不同源文件中。变量可以只在内部中有效,也可以在函数外部有但仅在一个源文件中有效,还可以在整个程序中都有效。

    编译的预处理阶段将对程序文本里德宏替换、包含其他文件以及进行条件编译。

    C语言是一种相对“低级”的语言。这种说法并没有什么贬义,它仅仅是意味着C语言可以处理大部分计计算机能够处理的对象,比如字符,数字,和地址。这些对象可以通过具体机器实现的算术运算符和逻辑运算符组合在一起并移动。

    C语言不提供直接处理诸如字符串、集合、列表、或数组等复合对象的操作。虽然可以将整个结构作为一个单元进行拷贝,但C语言没有处理整个数组或字符串的操作。除了由函数的局部变量提供的静态定义和堆栈外,C语言没有定义任何存储器分配工具,也不提供堆和无用内存回收工具。最后,C语言本身没有提供输入/输出功能,没有READ或WRITE语句,也没有内置的文件访问工具。所有的这些高层的机制必须显式调用的函数提供。C语言的大部分实现已合理地包含了这些函数的标准集合。

    类似地,C语言只提供简单的单线程控制流,即测试、循环、分组、和子程序,它不提供多道程序设计,并行操作,同步和协同例程。

    尽管缺少其中的某些特性看起来好像是一个严重不足(“这就意味着必须通过调用函数来比较两个字符串”),但是把语言保持在一个适度的规模有很多益处。由于C语言相对较小,因此可以用比较小的篇幅将它描述出来,这样也很容易学会。程序员有理由期望了解、理解并真正彻底地使用完整的语言。

    很多年来,C语言的定义就是《The C Programming Language》第一版中的参考手册。1983年,美国国家标准协会(ANSI)成立了一个委员会以制定一个现代的、全面的C语言定义。最后的结果是1988年完成的ANSI标准,即“ANSI C"。该标准的大部分特性已经被当前的编译器所支持。

    这个标准是基于以前的参考手册制定的。语言本身只做了相对较少的改动。这个标准的目的之一就是确保现有的程序仍然有效,或者当程序无效时,编译器会对新的定义发出警告信息。

    对大部分程序员来说,最重要的变化是函数声明和函数定义的新语法。现在,函数声明中可以包含描述函数实现参数的信息;相应地,定义的语法也做了改变。这样附加的信息使编译器很容易检测到因参数不匹配导致的错误。根据我们的经验,这个扩充对语言非常有用。

    新的标准还对语言做了一些细微的改进:将广泛使用的结构赋值和枚举定义为语言的正式组成部分;可以进行单精度的浮点运算;明确定义了算术运算符的属性,特别是符号类型的运算;对预处理进行了更详尽的说明。这些改进对大多数程序员的影响比较小。

    该标准的第二个重要贡献是为C语言定义了一个函数库。它描述了诸如访问操作系统(如读写文件)、格式化输入/输出、内存分配和字符串操作等类似的很多函数。该标准还定义了一系列的标准头文件,它们为访问函数声明和数据类型声明提供了统一的方法。这就确保了使用这个函数库与宿主系统进行交互的程序之间具有兼容的行为。该函数库很大程度上与UNIX系统的“标准I/O库”相似。很多系统中都使用了它。这一点对大部分程序员来说,不会感觉到有什么变化。

    由于大多数计算机本身就直接支持C语言提供的数据类型和控制结构,因此只需要一个很小的运行库就可以实现自包含程序。由于程序只能够显式地调用标准库中的函数,因此在不需要的情况下就可以避免对这些函数的调用。除了其中隐藏的一些操作系统细节外,大部分库函数可以用C语言编写,并可以移植。

    尽管C语言能够运行在大部分的计算机上,但它同具体的机器结构无关。只要稍加用心就可以编写出可移植的程序,即可以不加修改地运行于多种硬件上。ANSI标准明确提出了可移植性问题,并预设了一个常量集合,借以描述运行程序的机器特性。

    C语言不是一种强类型的语言,但随着它的发展,其类型检查机制已经得到了加强。尽管C语言最初定义不赞成在指针和整型变量之间交换,但并没有禁止,不过现在已经不允许这种做法了。ANSI标准要求对变量进行正确的声明和显式的强制类型转换,这在某些较完善的编译器中已经得到了实现。新的函数声明是另一个得到改进的地方。编译器将对大部分的数据类型错误发出警告,并且不自动执行不兼容数据类型之间的类型转换。不过,C语言保持了其初始的设计思想,即程序员了解他们在做什么,惟一的要求是程序员要明确地表达他们的意图。 

    同任何其他语言一样,C语言也有不完美的地方。某些运算符的优先级是不正确的;语法的某些部分可以进一步优化。尽管如此,对于大量的程序设计应用来说,C语言是一种公认的非常高效的、表示能力很强的语言。

  • 相关阅读:
    Linux
    Linux下安装和使用FTp
    国内maven库镜像(阿里云)
    Java build path && Deployment assembly && 编译路径 && 发布路径
    关于Eclipse编译和执行文件时,后台默认执行动作的思考
    spring核心框架体系结构(各个jar包作用)
    OpenSessionInViewFilter的作用及原理
    Spring事务失效的原因
    解决Spring框架的Dao层改用@Repository注解,无法使用JdbcDaoSupport的问题
    JTA 深度历险
  • 原文地址:https://www.cnblogs.com/sunll/p/4602998.html
Copyright © 2011-2022 走看看