目 录
第1章 初识C语言
1.1 C语言的起源
1972年,Dennis Ritch(丹尼斯 · 里奇)和Ken Thompson(肯 · 汤普逊)在贝尔实验室设计了C语言。
1.2 C语言的优点
在编程语言发展的几十年中,各种编程语言层出不穷,但唯有C语言,经久不衰。为什么他具有如此强大的生命力?我想你可以在以下几个方面找到你想要的答案。
1. 设计理念
C语言的设计理念可以让使用者自上而下的规划、结构化的编程及模块化的设计。
2. 高效性
C语言运行速度迅速,且具有控制微处理器等能力。
3. 可移植性
C语言可以在微小修改下就在其他系统运行。如:Linux系统,Windows系统或Mac系统等。
4. 创造性
著名的编程语言 Python等许多编译器和解释器都是基于C语言编写的,同时C语言在一些工程领域和生活行业领域的软件也有浓重色彩。
5. 面向程序员
C语言中有众多的库,程序员可以通过C语言实现自己的目标。
1.3 C语言的适用范围
新时代的今天,在众多编程的相关面试中,如果想更好的发展自己,最好说会C语言。
1.4 如何学好C语言
最好可以了解计算机组成原理,其对于C语言的运行理解,是至关重要的。储存计算机中所有内容都是数字,在计算机中,高级指令是无法理解的,这时编译器便发挥重大作用,将高级语言翻译成计算机能理解的指令集的程序。也就是,程序员负责高级思维活动,编译器负责繁琐的细节工作。在不同处理器中,需要使用合适的编译器来实现翻译,但编程语言用一个C语言即可。
1.5 C语言标准
C语言是一种具有国际标准的语言。如C89,C90,C99,C11,其中前两者是适用度最广的标准。
1.6 C语言的七步法
1. 定义程序
在动手写程序之前,要在脑中有清晰的思路,建议用手画出项目的思维导图
2. 设计程序
用一般术语描述问题,选择数据类型,目标对象等
3. 编写代码
这个过程取决于编程环境,并添加文字注释,多阅读代码规范守则。
4. 编译
编译器是将源代码转换成执行代码的程序,可执行代码是用计算机的机器语言表示的代码,这种语言由数字码表示的指令组成。
C编译器负责把代码翻译成指定的机器语言,此外,C编译器还将源代码与C库的代码合并成最终的程序。(应该说由一个叫链接器的程序链接库代码)编译器还会检查C语言是否错误或者警告。
C语言编译器有Clang、GCC、WIN-TC、SUBLIME、MSVC和Turboc等。
5. 运行程序
6. 调试程序
根据bug提示,不断积累经验。
7. 维护代码
通过合理设计程序,相关注释为后续修改维护做好设计。
1.7 编程机制
1. C编程的基本策略
用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码)。传统的C实现通过编译和链接两个步骤来完成这一过程。编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。C 使用这种分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,稍后再用链接器合并已编译的模块。通过这种方式,如果只更改某个模块,不必因此重新编译其他模块。另外,链接器还将你编写的程序和预编译的库代码合并。
2. 内部流程关系
中间文件有很多形式。其中,把源代码转换成机器语言代码,并把结果放在目标代码文件(简称目标文件),该文件不能直接运行,因目标文件中储存的是编译器翻译的源代码,不是一个完整程序。
目标代码文件是缺失启动代码,启动代码充当着程序和操作系统之间的接口。在相同硬件设备条件下,因为不同系统处理程序的方式不同,所以不同系统的启动代码不同。
因目标代码缺失库代码。链接器的作用是,把目标文件、系统的标准启动代码和库代码这三部分合并成一个文件,也就是可执行文件。
辨析:开始执行: 编译+链接+运行代码;开始调试:检查语法错误
3. 不同系统的C语言编辑
根据学习C语言使用者的不同诉求,选择适合的系统进行学习,初学者推荐Visual Studio 最新版,时代在进步,不要总用过时的版本,他是集成开发环境(IDE),堪称神器。
第2章 C语言预备知识
2.1 C语言程序示例及解释
#include <stdio.h> //预处理指令,含义:告诉编译器把stdio.h中的内容包含在当前程序中
int main(void)//int 是函数返回类型,main是函数名,且总是第一个被调用的函数,void表示main不带任何参数
{ //{ } 是函数体
int num = 0;//声明变量类型,并赋值num为0
printf("内容是%d\n",num);//调用标准库stdio的函数printf
return 0;//返回值
}
1. 头文件
通常,在C程序顶部的信息集合称为头文件(header),头文件包含了编译器创建最终可执行程序要用的信息,其作用就是帮助编译器把程序正确地组合在一起。
2. main()函数
一个可执行文件中只有一个main函数
3. 注释
单行注释//
多行注释/**/
4. 花括号、函数体和块
{
…
}
5. 声明
数据类型 变量命名
int num;
在C语言,要求所有变量必须先声明才能使用。
6. 赋值
num = 1;
该赋值表达式将右侧的值赋到左侧。
7. printf()函数
8. return语句
C标准要求main()这样做。有返回值的C函数要有return语句。该语句以return关键字开始,后面是待返回的值,并以分号结尾。
2.2 程序可读性
1. 选择有意义的函数名
2. 写注释
3. 在函数中用空行分隔概念上的多个部分
4. 每条语句各占一行
2.3 调试程序
常见的错误有语法错误,语义错误等。
当出现这些错误时,通过逐步跟踪程序的执行步骤,并记录每一个变量,便可以监视程序的状态。
2.4 关键字和保留标识符
符号 | 含义 |
---|---|
auto | 自动的 - 每个局部变量都是auto修饰的,自动创建,自动销毁 |
break | |
case | |
char | |
const | |
continue | |
default | |
do | |
double | |
else | |
enum | |
extern | 用来声明外部符号 |
float | |
for | |
goto | |
if | |
int | |
long | |
register | 寄存器关键字 |
return | |
short | |
signed | 有符号的,如正负号 |
unsigned | 无符号的 |
sizeof | |
static | 静态的 |
struct | |
switch | |
typedef | 类型定义 |
union | 联合体(共用体) |
void | 无- 空 |
volatile | |
while |
关键字是C语言的词汇。如果使用关键字不当(如,用关键字作为变量名),编译器会将其视为语法错误。
对于保留标识符,C语言已经指定了它们的用途或保留它们的使用权,如果你使用这些标识符来表示其他意思会导致一些问题。
2.5 小结
一门语言的语法是一套规则,用于管理语言中各有效语句组合在一起的方式。语句的语义是语句要表达的意思。编译器可以检测出语法错误,但是程序里的语义错误只有在编译完之后才能从程序的行为中表现出来。检查程序是否有语义错误要跟踪程序的状态,即程序每执行一步后所有变量的值。