C语言的目的:成为最有用的编程语言
C语言的设计理念让用户能轻松地完成自顶向下的规划、结构化编程和模块化设计。
C语言具有通常是汇编语言才具有的微调控制能力(汇编语言是为特殊的中央处理单元设计的一系列内部指令,使用助记符来表示;不同的CPU系列使用不同的汇编语言),可以根据具体情况微调程序以获得最大运行速度或最有效地使用内存。
在一种系统中编写的C程序稍作修改或不修改就能在其他系统运行。如需修改,也只需简单更改主程序头文件中的少许项即可。
功能强大且灵活的UNIX操作系统,大部分是用C语言写的;其他语言(如,FORTRAN、Perl、Python、Pascal、LISP、Logo、BASIC)的许多编译器和解释器都是用C语言编写的。因此,在UNIX机上使用FORTRAN时,最终是由C程序生成最后的可执行程序。
C语言有丰富的运算符,能让程序员简洁地表达自己的意图。C语言不像Pascal甚至是C++那么严格。这样的灵活性既是优点也是缺点。优点是,许多任务用C来处理都非常简洁(如,转换数据的格式);缺点是,你可能会犯一些莫名其妙的错误,这些错误不可能在其他语言中出现。
C语言缺点:
要享受用C语言自由编程的乐趣,就必须承担更多的责任。特别是,C语言使用指针,而涉及指针的编程错误往往难以察觉。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zl48sgUz-1593754863027)(0131.jpg)]
随机存取内存(RAM)是存储程序和文件的工作区
而永久内存存储设备(过去一般指机械硬盘,现在还包括固态硬盘)即使在关闭计算机后,也不会丢失之前存储的程序和文件。
外围设备(如,键盘、鼠标、触摸屏、监视器)提供人与计算机之间的交互。
中央处理单元(CPU)承担绝大部分的运算工作:
1、CPU负责处理程序
2、从内存中获取并执行一条指令,然后再从内存中获取并执行下一条指令,诸如此类
3、CPU由若干寄存器组成:每个寄存器都可以存储一个数字;一个寄存器存储下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令。在获取指令后,CPU在另一个寄存器中存储该指令,并更新第1个寄存器存储下一条指令的地址。CPU能理解的指令有限(这些指令的集合叫作指令集)。而且,这些指令相当具体,其中的许多指令都是用于请求计算机把一个数字从一个位置移动到另一个位置。
计算机的工作原理是:
如果希望计算机做某些事,就必须为其提供特殊的指令列表(程序),确切地告诉计算机要做的事以及如何做。
编译器:
作用:把高级语言程序翻译成计算机能理解的机器语言指令集的程序。
C语言的数个标准:
ANSI/ISO C标准:1989年正式公布,也叫C89或C90标准
标准的精神点:
● 信任程序员;
● 不要妨碍程序员做需要做的事;
● 保持语言精练简单;
● 只提供一种方法执行一项操作;
● 让程序运行更快,即使不能保证其可移植性。
C99标准
发布于1994年
遵循最初的C90原则,包括保持语言的精炼简单
三个目标:
1、支持国际化编程
2、调整现有实践致力于解决明显的缺陷
3、为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。
C11标准
发布于2007年
在理想状态中,编程分为7个步骤:
1、 定义程序的目标
2、 设计程序
3、 编写代码
4、 编译
5、 运行程序
6、 测试和调试程序
7、 维护和修改程序
1、 定义程序的目标
想要程序去做什么首先自己要明确自己想做什么,思考你的程序需要哪些信息,要进行哪些计算和控制,以及程序应该要报告什么信息。
2、 设计程序
考虑如何用程序来完成它。
决定在程序(还可能是辅助文件)中如何表示数据,以及用什么方法处理数据。
3、 编写代码
示例代码1如下所示:
#include
int main(void)
{
int dogs;
printf("lHow many dogs do you have? \n");
scanf("%d",&dogs);
printf("so you have %d dog(s)! \n",dogs);
return 0;
}
4、 编译
注意:编译的细节取决于编程的环境
编译器作用:
编译器是把源代码转换成可执行代码的程序
会检查C语言程序是否有效。如果C编译器发现错误,就不生成可执行文件并报错。
5、 运行程序
在常见环境(包括Windows命令提示符模式、UNIX终端模式和Linux终端模式)中运行程序要输入可执行文件的文件名,而其他环境可能要运行命令(如,在VAX中的VMS)或一些其他机制。
6、 测试和调试程序
检查程序是否按照你所设计的思路运行。你会发现你的程序中有一些错误,计算机行话叫作bug。
调试:查找并修复程序错误的过程
7、 维护和修改程序
发现程序有错,或者想扩展程序的用途,这时就要修改程序。
XXX.c 文件被称为源代码文件
XXX为基本名,C为扩展名
不同系统对文件名的要求:
MS-DOS:基本名不能超过8个字符
部分UNIX:整体文件名不能超过14个字符
部分UNIX:整体文件名最多255个字符
#include
int main(void)
{
printf("Concrete contains gravel and cement.\n");
return 0;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uxlKlkZ2-1593754863031)(0181.jpg)]
编译器与链接器
UNIX系统上编译C程序的过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rcUZ3NBe-1593754863034)(0182.jpg)]
GNU项目:
始于1987年
也叫做GCC
LVM项目:
始于2000年
clang项目:
始于2012年
gcc和clang命令都可以根据不同的版本选择运行时选项来调用不同C标准。
参考链接:
http://www.gnu.org/software/gcc/index.html
采用螺旋式方法,先在前几个章节中介绍一些主题,在后面章节再详细讨论相关内容。例如,对学习C语言而言,理解函数至关重要。因此,我们在前几个章节中安排一些与函数相关的内容,等读者学到第9章时,已对函数有所了解,学习使用函数会更加容易。与此类似,前几章还概述了一些字符串和循环的内容。
对编程而言,可移植性意味着什么?
完美的可移植程序是,其源代码无需修改就能在不同计算机系统中成功编译的程序。
解释源代码文件、目标代码文件和可执行文件有什么区别?
源代码文件包含程序员使用的任何编程语言编写的代码。目标代码文件包含机器语言代码,它不必是完整的程序代码。可执行文件包含组成可执行程序的完整机器语言代码。
编程的7个主要步骤是什么?
(1)定义程序目标
(2)设计程序
(3)编写程序
(4)编译程序
(5)运行程序
(6)测试和调试程序
(7)维护和修改程序
编译器的任务是什么?
编译器把源代码(如,用C语言编写的代码)翻译成等价的机器语言代码(也叫作目标代码)。
链接器的任务是什么?
链接器把编译器翻译好的源代码以及库代码和启动代码组合起来,生成一个可执行程序。