工具原理及C语言语法基础
编程语言之编程型语言
计算机是怎么工作的?
计算机工作核心:CPU(执行他认识的指令集)
存储指令的仓库:内存
CPU要想在仓库里取出指令,这时候就要引入地址线,通过地址线的选择,选到了仓库中的某一个位置,CPU通过地址线发出度或写的指令,然后内存就会通过数据线跟CPU进行相应的读写操作
可以理解为我们的计算机就是让CPU不断执行指令的循环过程,不断的通过仓库让我们所说的指令让CPU执行。
当内存存储的东西越来越多不够用了,这时候就用到了外存。内存可以和外部存储器相互交换。
CPU里指令长什么样?
ARM处理器的指令(为例)
- 32bit的指令为例
- 一个具有8B大小能够在ARM体系CPU下运行的二进制文件
- 0x EF 00 00 12
- 汇编语言:swi 0x12
编译器简介
汇编语言难于记忆,不便于阅读,怎么办?
人类语言的翻译官 — 编译器的诞生
- 如何约定这个翻译官的工作规范那?
-
- 1989年,美国国家标准协会(ANSI)提出的ANSI C
- 1990年,ISO组织采纳ANSI C后,提出ISO C90
- 1999年,ISO组织继续扩充C语言编译器的能力,提出C99
- 后续又提出了C11标准
- 如何学习C语言
-
- 翻译官在阅读我们写的代码,而代码就是一个个单词和标点符号
- 那么我们要让翻译官认识单词,认识相应的标点符号
- 翻译官怎么认识单词?
- 翻译官怎么认识标点符号那?
翻译官有哪些,怎么用?
- 微软阵营 MSVC
- 开源组织阵营 GNU
-
- gcc
-
- Linux : gcc
- Windows : minGW
翻译官的工作流程是什么?
- 编译 —> 汇编 —> 链接
- 预处理器
- gcc –E –o a.i a.c
- 编译器
- gcc –S –o a.s a.i
- 汇编器
- gcc –c –o a.o a.s
- 链接器
- gcc –o build.exe a.o
预处理器介绍 #开头+特殊单词
预处理指令
编译前要处理的东西
-
包含头文件 —> #include(所有预处理指令都是#+单词)
-
宏定义 —> #define 宏名 宏体
-
条件编译 #ifdef #endif
意思是如果定义了DEBUG那就为真,输出hello world
在工程项目中,怎么做到不改变代码的前提下,可以控制一段代码想让执行和不想让他执行呢?
这个时候就要用到条件编译
#ifdef +任意单词名字{}
#else{}
#endif
怎么做到定义这个开关呢
方法一 在宏定义的时候, 人为的在代码前面define一个你定义的这个名字(缺点:改动代码,可能引起纠纷)
方法二 在gcc中定义 -D+名字 (好处是可以在代码不变的前提下对代码进行调试和发布)