vlambda博客
学习文章列表

C语言1:初识C语言

C语言起源

1972年美国贝尔实验室的丹尼斯里奇和肯汤普逊在开发UNIX操作系统时设计了C语言。

C语言是为程序员设计开发的,初衷是将其作为程序员使用的一种编程工具。

C语言优点

能很好的控制硬件。

使用过C语言的人都对它很满意。

设计理念:让用户能轻松的完成自顶向下的规划,结构化编程,模块化设计。因此更易懂,更可靠。

高效性:代码紧凑,程序更小。可根据具体情况微调程序以获得最快运行速度和最有效的使用内存。

可移植性:

不做修改或稍作修改就能在其他系统运行。

如需修改,也只需简单更改主程序头文件中的少许项即可。

对特殊硬件设备或操作系统特殊功能编写的程序通常不可移植。

强大而灵活:许多操作系统和其他编程语言的编译器和解释器都是用C语言编写的。

面向程序员:为满足程序员的需求而设计的,可以利用C语言访问硬件,操作内存中的位。

C语言缺点

C语言使用指针,涉及指针的编程错误很难察觉。

代码紧凑,使用大量运算符,代码容易混乱费解。

计算机主要部件

中央处理器(CPU):承担绝大部分运算工作,负责处理程序。

随机存取内存(RAM):存储程序和文件的工作区。

硬盘:永久内存存储设备。

外围设备(键盘,鼠标,触摸屏,监视器):提供人与计算机的交互。


CPU工作原理

从内存中获取并执行一条指令,循环重复。

CPU的小工作区:若干个寄存器组成,每个寄存器可以存储一个数字。

储存在计算机中的所有内容都是数字。计算机载入寄存器的指令也是以数字形式存储,指令集中的每条指令都有一个数字码。

计算机程序最终必须以数字指令码(机器语言)来表示。

计算机工作原理

如果希望计算机做某些事,就必须为其提供特殊的指令列表(程序),确切地告诉计算机要做的事以及如何做。

必须用计算机能直接明白的语言(机器语言)创建程序。

高级编程语言

简化了编程工作。

不必用数字码表示指令,所使用的指令更贴近你如何想这个问题。

不用考虑CPU在完成任务时具体需要哪些步骤。

编译器

C语言是编译型语言

把高级语言程序翻译成计算机能理解的机器语言指令集。

把一种高级语言程序转换成供各种不同类型CPU使用的机器语言程序,提高可移植性。

语言标准

假设程序中未使用机器特定的编程技术,那么它的运行情况在任何实现中都应该相同。

要做到这一点,不同的实现就要遵循同一个标准。

C语言精神

信任程序员

不要妨碍程序员做需要做的事

保持语言精炼简单

只提供一种方法执行一项操作

让程序运行更快,即使不能保证其可移植性

使用C语言编程的步骤

1.定义程序的目标

想要程序做什么,程序需要什么信息,要进行哪些计算和控制,程序要报告哪些信息。

用一般术语描述问题。

2.设计程序

根据程序目标考虑如何用程序完成它,用户界面是怎样的,如何组织程序,目标用户是谁,如何表示数据,花多长时间完成。

还是用一般术语描述问题。

3.编写代码

也就是把设计的程序翻译成C语言

4.编译

使用编译器把源代码转换成可执行代码,可执行代码是用计算机的机器语言表示的代码。

机器语言是由数字码表示的指令组成。

C编译器还将源代码与C库的代码合并成最终的程序。

链接器:链接源代码与库函数,编译器自动运行链接器。

最终生成一个用户可以运行的可执行文件,其中包含着计算机能理解的代码。

编译器会检查C程序代码中的错误,从而报错或发出警告。

理解编译器报告的错误或警告信息是程序员的重要技能。

5.运行程序

运行可执行文件

6.测试和调试程序

检查程序是否按你所设计的思路运行,发现程序中错误bug。

查找并修复程序错误的过程叫做调试。

7.维护和修改代码

程序有错,扩展程序用途,添加新特性,使程序在不同计算机系统运行,都需要修改程序。

8.编写越复杂的程序,定义程序目标和设计程序环节越重要,越不可缺少。

源代码文件hello.c,基本名hello,扩展名c,扩展名写成大写C无效


编译过程

1.编译器把源代码转换成目标代码。

目标代码是机器语言代码形式。

2.链接器把目标代码,启动代码,库代码这3部分合并成可执行文件。

启动代码充当着程序和操作系统之间的接口。

库代码中存储着许多库函数的目标代码,链接器只会把程序中要用到的库函数代码提取出来。

如需更改某个模块,可独立编译该模块,不必重新编译其他模块,再用链接器合并已编译的模块。

在UNIX系统上编译

1.运行命令:cc demo.c 生成可执行文件a.out

2.命令窗口输入a.out,运行程序

命令:cc -v 显示你所使用的编译器及其版本

cc的别名:gcc或clang

gcc -std=c99 demo.c C99标准

gcc -std=c1x demo.c C11草案标准

gcc -std=c11 demo.c C11标准