学习任何一门编程语言,花两个小时左右的时间了解这门编程语言的发展史是很有必要的。
有道无术,术尚可求,有术无道,止于术!
学一个知识,有了思想,但是没有技术,不要紧,技术还可以去学习。只有技术,没有思想,只会止步于技术。
01. 什么是C语言
说C语言之前,说一下什么是语言。语言无非就是用来交流沟通的。
人的语言:汉语、英语、日语、法语…
计算机语言:C语言、C++、C#、Java、Python、PHP…
例如:中国人和美国人这两种人之间想沟通,要么中国人学习英语,要么美国人学习汉语。所以说,我们学习编程语言是为了和机器沟通,但是机器和人是不一样的,它们没有思想,没有感情,即我们要通过学习编程语言来达到和机器的沟通,要机器去做事。
[C语言百度百科](c语言_百度百科 (baidu.com))
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森(Kenneth Lane Thompson)设计的B语言为基础发展而来,在它的主体设计完成后,汤普森和里奇用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“[ANSI C](https://baike.baidu.com/item/ANSI C/7657277)”,截至2020年,最新的C语言标准为2018年6月发布的“C18”。
02. 计算机介绍
计算机结构组成:
计算机系统组成:
03. 语言发展历程
机器语言:一组由0和1系列组成的指令码,让计算机干活就得用机器语言(二进制数)去命令他。
汇编语言:在机器语言的基础上,用标识符取代0和1
高级语言:机器语言和汇编语言都是面向机器。C语言面向过程。
编译器:编译程序将其翻译成机器语言,就是编译程序,即编译器。
04. C语言可以干什么
C语言是母体语言,是一种造轮子的语言,是人机交互接近底层的桥梁,学会了C/C++,就掌握了技术的核心。
有句话叫“C生万物“,像Python、Java的解释器,Java的VM虚拟机,安卓的底层源码,Linux内核,WPS软件,都是C语言写的。
电脑是由一堆硬件组成,要想使用,则还需要装一个操作系统(Windows/Linux)来操作这些硬件。操作系统和硬件之间的层次是驱动,操作系统调用驱动,让硬件进行工作。在操作系统之上称为应用层,也就是装一些应用软件,即QQ、微信、网易云音乐…,所以C语言大部分应用于应用层往下的开发,也就是底层开发。
C语言主要的编译器有:Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等
05. 第一次C程序Hello,World
/*
#:关键标识符,表示引用头文件
include:引入头文件的关键字
stdio.h:系统标准输入输出库对应的头文件(使用printf()函数要引用改头文件)
< >:使用系统库函数
" ":用户定义库函数
*/
#include <stdio.h>
/*
int:函数返回类型是int(整型)
main:函数名,主函数main是程序唯一入口,有且仅有一个main()函数
main后面的():里面写函数的参数
{ }中括号里面的内容:是函数体
*/
int main()
{//函数体起始位置
printf("Hello,World\n");//printf()库函数,在屏幕上打印Hello,World
return 0; //返回当前函数调用(退出程序),
}//函数体结束位置
注意事项:
- 写完函数、定义变量、return后等等,后面用 ; 英文分号结尾。
- C语言源代码文件的扩展名是 .c
06. system函数
int system(const char *command);
功能:在已经运行的程序中执行另外一个外部程序
参数:外部可执行程序名字
返回值:不同的系统 调用成功的返回值不一样。失败返回-1
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("pause"); //windows平台
system("ls"); //Linux平台, 需要头文件#include <stdlib.h>
return 0;
}
07. C语言编译过程
C代码编译成可执行程序经过4步:
- 预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
- 编译:检查语法,将预处理后文件编译生成汇编文件
- 汇编:将汇编文件生成目标文件(二进制文件)
- 链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去
gcc编译过程:
-
预处理:gcc -E hello.c -o hello.i // -E 只进行预处理
-
编 译:gcc -S hello.i -o hello.s // -S 只进行预处理和编译
-
汇 编:gcc -c hello.s -o hello.o //-c 只进行预处理、编译和汇编
-
链 接:gcc hello.o -o hello_elf //指定生成的输出文件名为 hello_elf
文件名后缀:
. c :C语言文件
. i : 预处理后的C语言文件
. s : 编译后的汇编文件
. o : 编译后的目标文件