C语言
起源:1972年,贝尔实验室的丹尼斯.里奇和肯.汤普逊,开发UNIX操作系统时设计C语言
设计初衷:将其作为程序员使用的一种编程工具
优缺点
1、设计特性:自顶向下,结构化编程,模块化设计
2、高效快速:可以根据具体情况微调程序以获得最大运行速度(快)或最有效使用内存(小)
3、可移植性:使用(针对特定系统的)编译器编译,源代码无需或少量修改就能在不同计算机系统中成功编译
4、面向程序员:可以访问硬件,操作内存位,有丰富的运算符,有大型c函数库
5、面向过程
6、指针、混乱
标准
ANSI/ISO标准(C89/C90):定义C语言和C标准库
C99:国际字符集、解决明显缺陷、适应关键数值计算
C11
计算机工作原理
中央处理器 CPU:运算
随机存取内存 RAM:存储程序和文件工作区
永久存储设备(硬盘):关机不丢失
外围输入输出(鼠标键盘屏):提供人机交互
CPU工作区:若干寄存器,每个寄存器存储数字。
指令集:CPU可理解的指令集合,eg:移动内存的一个数字到寄存器
储存在计算机中所有内容都是数字
计算机程序最终以数字指令码(机器语言)表示
CPU从内存中获取并执行一条指令,再获取并执行下一条指令,重复执行。
(程序计数器自动更新)寄存器存储下一条指令的内存地址,CPU使用该地址获取和更新下一条指令,获取指令之后,在另一个寄存器中存储该指令(指令暂存),(程序计数器自动更新)寄存器存储下一条指令的地址
寄存器另外应用于数据操作,地址生成,条件判断等方面,寄存器原理,寄存器组成
两数相加计算机操作步骤
1、从内存位置 2000 上把一个数字拷贝到寄存器 1。mov ax 2000
2、从内存位置 2004 上把另一个数字拷贝到寄存器 2。mov bx 2004
3、把寄存器2中的内容与寄存器 1中的内容相加,把结果储存在寄存器1中。add ax bx
4、把寄存器1中的内容拷贝到内存位置 2008。mov 2008 ax
编写C程序:
编译器:把高级语言程序翻译成计算机能理解的机器语言指令集
使用不同的编译器可以把同一份代码转换成不同类型CPU使用的机器语言程序
1、定义程序目标:程序需要哪些信息(参数),要哪些计算和控制(算法),程序应该报告什么信息(返回值)
2、设计程序:如何表示数据,用什么方法处理数据,用户界面,组织程序,目标用户
3、编写代码:使用文本编辑器创建源代码文件
4、编译:使用编译器,检查错误,源代码转化为可执行代码(编译器翻译为机器语言,链接器链接源代码和C库函数)
5、运行程序:可执行文件(机器语言表示的代码,由数字码表示的指令),执行命令或双击
6、测试和调试程序,查找并修复程序错误
7、维护和修改程序
编程机制
源代码文件:编写的内容被存储在文本文件中wordcount.c
基本名:wordcount
扩展名:c
源代码文件:包括编程语言编写的代码
可执行文件:包括组成可执行程序的完整机器语言代码
源代码文件 -> 可执行文件:
编译:源代码转换为中间代码(目标代码文件,包括机器语言代码)
链接:中间代码和启动代码、库函数合并为可执行文件
方便对程序进行模块化,独立编译单独模块,链接器合并已编译的模块,合并启动代码,合并预编译的库代码
不同系统编译
UNIX系统编译
#编译,成功出a.out
cc inform.c
#执行a.out文件
a.out
GNU编译器集合
GCC:GNU编译器集合,包含GCC C编译器;
GCC有各种版本适应不同硬件平台和操作系统;
gcc命令调用GCC编译器;
#显示编译器及版本
cc -v
#调用C99/C11标准编译
gcc -std=c99 inform.c
gcc -std=c11 inform.c
linux编译
安装GCC
#编译,成功出a.out
gcc inform.c
#执行a.out文件
a.out
PC windows编译
下载C编译器,通过命令行使用GCC
Cygwin:在自己的视图模仿linux
MinGW:在Windows命令行中运行
目标文件扩展名obj
编译和链接hello.c文件生成hello.exe
在命令行中输入hello即可运行
Windows和linux的程序可以交替运行,但不能访问另个系统的文件
集成开发环境
IDE 内置C(C++)语言的编辑器和编译器
提供新建,保存,编译,运行,调试等功能
提供运行程序的多种环境,需要在创建项目时选择正确的项目形式,eg:DOS EXE,Console,Character Mode
程序执行完成之后执行程序的窗口立即消失,可加getchar();使程序暂停直到按下enter键,
需要输入时需要有2次getchar();