C 语言概述
1. 什么是 C 语言
一提到语言这个词语,自然会想到的始像英语、汉语等自然语言,因为它是人和人交换信息不可缺少的工具。
而今天的计算机遍布了我们生活的每一个角落,除了人和人的相互交流之外,我们必须和计算机交流。
用什么样的方式和计算机做最直接的交流呢?人们自然想到的是最古老也最方便的方式——语言,而 C 语言就是人和计算机交流的一种语言。
语言是用来交流沟通的。有一方说,有另一方听,必须有两方参与,这是语言最重要的功能:
● 说的一方传递信息,听的一方接收信息;
● 说的一方下达指令,听的一方遵循命令做事。
语言是人和人的交流,C 语言是人和机器的交流。只是人可以不听另外一个人,但是计算机是无条件服从。
语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。
2. 计算机介绍
2.1 计算机结构组成
2.2 计算机系统组成
2.3 程序和指令
● 指令是对计算机进行程序控制的最小单位
● 所有的指令的集合称为计算机的指令系统
● 程序是为完成一项特定任务而用某种语言编写的一组指令序列。
3. 语言的发展历程
3.1 机器语言
计算机的大脑或者说心脏就是 CPU,它控制着整个计算机的运作。每种 CPU 都有自己的指令系统。这个指令系统,就是该 CPU 的机器语言。
机器语言是一组由 0 和 1 系列组成的指令码,这些指令码,是 CPU 制作厂商规定出来的,然后发布出来,请程序员遵循。
要让计算机干活,就得用机器语言(二进制)去命令它。这样的命令,不是一条两条,而是上百条。而且不同型号的计算机其机器语言是不相通的,按着一种计算机的机器指令编制的程序,不能在另一种计算机上执行。
3.2 汇编语言
机器语言编程是不是很令人烦恼呢,终于出现了汇编语言,就是一些标识符取代 0 与 1。是一门人类可以比较轻松认识的编程语言。
只是这门语言计算机并不认识,所以人们还不能用这门语言命令计算机做事情。这正如不懂汉语的美国人无法明白中国人说的话一样,那么在现实生活中,我们怎样让中国人说出的话让不懂汉语的美国人明白呢? ——翻译!
所以,有一类专门的程序,既认识机器语言,又认识汇编语言,这就是翻译!
3.3 高级语言
汇编语言和机器语言都是面向机器的,机器不同,语言也不同。既然有办法让汇编语言翻译成机器语言,难道就不能把其它更人性化的语言翻译成机器语言呢?
1954 年,Fortran 语言出现了,其后相继出现了其它类似的语言。这批语言,使程序员拜摆脱了计算机硬件的限制,把主要精力放在了程序设计上,不在关注底层的计算机硬件。这类语言,称为高级语言。
同样的,高级语言要被计算机执行,也需要一个翻译程序将其翻译成机器语言,这就是编译程序,简称编译器。
这类高级语言解决问题的方法是分析出解决问题所需要的步骤,把程序看作是数据被加工的过程。基于这类方法的程序设计语言成为面向过程的语言。C 语言就是这种面向过程的程序设计语言。
3.4 语言的层次
3.5 语言进化史
4. 为什要学习 C 语言
4.1 C 语言特点
优点:
C语言能够存在并发展至今,其生命力之强可见一斑。这其中一定是有着某些不可替代的优点,那么C语言编写程序的优点都有哪些呢?
(1)程序结构简洁、紧凑、规整,表达式简练、使用灵活。
(2)编写的程序可读性强,编译效率高。
(3)具有丰富的运算符,多达34种。丰富的数据类型与丰富的运算符相结合,使C语言具有表达灵活和效率高等特点。
(4)数据类型种类繁多。C语言具有5种基本的数据类型和多种构造数据类型以及复合的导出类型,同时还提供了与地址密切相关的指针机器运算符。指针可以指向各种类型的简单变量、数组、结构和联合,乃至函数等。此外,C语言还允许用户自己定义数据类型。
(5)是一种结构化程序设计语言,特别适合大型程序的模块化设计。C语言具有编写结构化程序所必需的基本流程控制语句,C语言程序是由函数集合构成的,函数各自独立,并且作为模块化设计的基本单位。(说明: C语言的源文件,可以分割成多个源程序,分别进行编译,然后连接起来构成可知性的目标文件,为开发大型软件提供了极大的方便。C语言还提供了多种存储属性,使数据可以按其需要在相应的作用域起作用,从而提高了程序的可靠性。)
(6)语法限制不太严格,程序设计自由度大。例如,对数组下标越界不作检查,由程序编写者自己保证程序的正确。一般的高级语言语法检查比较严,能检测出几乎所有的语法错误,而C语言允许程序编写者有较大的自由度,因此放宽了语法的检查。程序员应当仔细检查程序,保证其正确,而不要过分依赖C语言编译程序去查错。
(7)允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此,C语言既具有高级语言的功能,又兼容低级语言的许多功能,可用来编写系统软件。
(8)生成的目标代码质量高,程序执行效率高。它一般只比汇编程序生成的目标代码率低10%~20%。
(9)具有较高的可移植性。它的语句基本上无须修改就能用于各种型号的计算机和各种操作系统。
C语言是处于汇编语言和高级语言之间的一种中间型程序设计语言,常被称为中级语言。它既有高级语言的基本特点,又具有汇编语言面向硬件和系统,可以直接访问硬件的功能。
C语言的这些优点,读者仅通过这里的介绍还不能深刻理解和体会,待对C语言有了一定的了解之后再回顾一下,就会体会到这些优点了。但由于C语言的限制少、灵活性大、功能强,所以对程序员有较高的要求。在使用C语言进行编程时,需要有足够的细心和耐心。
缺点:
C语言虽然具有功能强、灵活性大、可移植性强、应用广泛等优点,但是同时也存在着一定的缺点,导致在学习和编程时造成一定的困难和错误。那么在编程时应该如何规避C语言的不足之处呢?
(1)C语言语法限制不太严格,程序设计自由度大。"限制"与"灵活"是对立的,强调"灵活"就会放松"限制"。这就对使用C语言进行编程提出了更高的要求,程序员要对程序设计更熟悉。例如,C语言对数组下标越界不检查,容易造成数据在内存中的混乱。
(2)C语言具有丰富的运算符,多达34种。丰富的数据类型与丰富的运算符相结合,使C语言具有表达灵活和效率高等特点。然而,这却增加了使用C语言的难度,这些运算符分为众多优先级,不容易记忆,可能混淆而产生错误。
(3)C语言存在着一些不应该存在的语法限制。例如,switch语句由case结构组成,每个case结束之后都要使用一个break来跳出case结构,否则将会继续执行下面的case,这样就会造成错误。
(4)C语言中许多运算符被"重载",具有不同的意义,甚至有些关键字也具有好几种意义。例如,void作为函数的返回类型,表示不返回任何值;在指针声明中,表示通用指针类型;在参数列表中,表示没有参数。
C语言是一门非常流行的编程语言,被许多平台选用,具有许多的优点。然而,正如人们常说的"事物都具有矛盾性",有利必有弊,在看到其种种优点之时,千万不要忽视其存在的不足和缺陷。上面的分析不是为了打击大家学习C语言的积极性,而是为了使大家更好地了解和学习C语言。
尽管C语言存在着诸多不足,但无法掩盖它的优势,当今的许多软件仍在使用C语言进行开发。大家需要经过长时间的开发积累,记住C语言的这些特点,才能更灵活地应用C语言进行开发。
问:
C语言是C++的子集吗?C++是在C语言的基础上扩展而来并包含所有C语言的内容吗?
答:
从实用角度讲,C++属于C语言的一个超集,基本上兼容ANSI C。但是从编译角度上讲,C语言的有些特性在C++中并不支持。相反,ANSI C继承了C++的几个特性,包括原型和常量。因此,这两种语言并不是另一个的超集或子集;而且它们在一些通用构造的定义上也不同。尽管有这些不同,许多C程序在C++环境中仍能编译,而且许多最新的编译器同时提供C和C++的编译模式。但是,不要把C代码完全当做C++代码来编译,否则在遇到不兼容问题时会给程序带来错误。
C++对C语言的改进如下:
C++对数组定义进行了限制。在C语言中,初始化数组时不作数组溢出判断,这样就容易使数组没有足够大的空间存放数据而产生错误。C++对此作了一些改进,像char str[3]="Jim"这样的表达式就被认为是一个错误,但是它在C语言中是合法的。
在C++中,声明语句可以穿插于语句之间。大家知道,在C语言中,一个语句块中的所有声明必须都放在所有语句的前面,而C++去掉了这个限制,使声明语句可以穿插于语句之间。
C++对C语言的改进最主要表现在对面向对象的扩充上。C语言是一种面向过程的结构化的语言,而C++是面向对象的语言,它在C语言的基础上增加了面向对象的机制,使得C++比C语言更加完善和实用。
C++中存在而C语言中不存在的限制:
在C++中,用户代码不能够调用主函数main()函数,但是在C语言中这是可以的(但是极少出现这种情况)。
C++中对函数原型的声明是严格的,要求必须完整,而在C语言中却没有这么严格。
在C++中,由typedef定义的类型的名字不能与已有的结构名称冲突,但在C语言中却是允许的。
C++规定了更严格的类型处理,例如,当void*指针赋值给另一个类型的指针时,C++要求必须进行强制类型转换,而在C语言中则无需这么做。
C++与C语言中含义不同的特性:
C++对C语言的关键字进行了扩充,增加了至少十几个。这些关键字在C语言中可以作为标识符使用,但是如果这样的C语言代码使用C++编译器进行编译,就会产生错误信息。
在C++中,内层作用域的结构名称将会隐藏外层空间中相同的对象名,在C语言中则不会这样。
在C++中,注释可以使用"//"注释符,而在C语言中则不能使用。
从总体上说,C语言是C++的前身,上面只介绍了它们的一部分不同之处。从上面的介绍可以看出,C++并没有对C语言存在的一些最基本的问题进行改进,它仍然保留了C语言的许多缺陷,而且在此基础上又堆积了大量复杂的东西。不过尽管存在着不少缺陷,C语言和C++都被广泛地使用着,这也说明了其存在的价值。
C和C++的不同之处还有很多,大家要通过实际编程来分析两者的差异,并保持警惕,避免相互使用时出现错误。
4.2 学习 C 语言的理由
4.3 C语言应用领域
● C 语言可以写网站后台程序
● C 语言可以专门针对某个主题写出功能强大的程序库
● C 语言可以写大型游戏的引擎
● C 语言可以写出另一种语言来
● C 语言可以写操作系统和驱动程序,并且只能用 C 语言来编写
● 任何设备只要配置了微处理器,就都支持 C 语言。从微波炉到手机,都是由 C 语言技术来推动的
4.4 C 语言的简介
C 语言仅有 32 个关键字,9 种控制语句,34 种运算符,却能完成无数的功能:
4.5 学习 C 语言的常见困惑