C语言差缺补漏(一)
看看你有哪些没有注意到的点或者遗忘的知识点
1. 编译流程
编译经历过程 ↓ (选择linux下的编译器才能看到编译过程,例:g++)
-
编辑器:程序员用来编辑代码的程序 (记事本,VC6.0,vim)
( 此处有一个预处理过程 ) C生成 .i 文件 C++生成 .ii 文件
—— 这一步主要是无关代码的清除 -
(编译)编译器:查看检查代码的语法错误,将.c/.h转换成汇编代码文件 .s
-
(汇编)汇编器:将生成好的汇编语言文件,生成二进制语言文件(目标文件) .o
-
(连接)连接器:将生成好的二进制语言.o + 用到的库.a + 启动代码 = 可执行文件
(可执行文件类型:windows下.exe,linux下无需讨论)
2. C语言的关键字32个(不能用来作变量名)
1.数据类型关键字(12个) 32位编译环境下
字符型 | 短整型 | 整型 | 长整型 | 单精度浮点型 | 双精度浮点型 |
---|---|---|---|---|---|
char | short | int | long | float | double |
1字节 | 2字节 | 4字节 | 4字节 | 4字节 | 8字节 |
long int x; 表示 x 是长整型
无符号类型 | 有符号类型 | 结构类型 | 共用类型 | 枚举类型 | 空类型 |
---|---|---|---|---|---|
unsigned | signed | struct | union | enum | void |
不能用void定义变量,系统不能确定给变量分配多少内存空间
2.控制语句关键字(12个)
条件语句 | 条件否定分支 | 开关语句 | 开关语句分支 | 开关其他分支 | for循环语句 |
---|---|---|---|---|---|
if | else | switch | case | default | for |
do循环体 | 循环语句条件 | 跳出循环语句 | 下一轮循环 | 无条件跳转 | 子程序返回 |
---|---|---|---|---|---|
do | while | break | continue | goto | return |
3.储存类型关键字(5个)
声明外部变量 | 声明寄存器变量 | 声明静态变量 | 声明只读变量 | 声明自动变量 |
---|---|---|---|---|
extern | register | static | const | auto |
注意:
如果没有register int num来声明,只用int num来定义,但num使用很频繁,系统会自动将其放入寄存器,且寄存器里不能取地址
4.其它关键字(3个)
计算数据类型长度 | 给数据类型取别名 | 防止编译器优化 |
---|---|---|
sizeof | typedef | volatile |
volatile 防止编译器优化↑(优化操作:自动存放变量到寄存器(3.注意)),强制访问内存操作
volatile int num;//每次都从内存中访问,能时刻最快地监控变量
main define scanf printf
都不是关键字
3. 整数与实数
- C 语言常量只有八、十、十六进制,没有二进制,不能输出和储存二进制 (但可以间接实现)
- C 语言中的八进制规定要以 0 开头。八进制每位没有8,十进制每位没有10
十进制:%d %u %ld %lu
八进制: %o
十六进制: %x’
**注:输出时最好在占位符中添加 # ,按其对应进制格式输出
%#o %#x
输入100 八进制 十六进制
对应输出 %o:144 %x:64
%#o:0144 %#x: 0x64
这样输出的结果会按照该进制的格式输出
- C 语言小数点两边有一个是零的话,可以不用写
…
1.0 在 C 语言中可写成 1.
0.1 在 C 语言中可以写成 .1 - 实型数据的合法形式:
- 指数形式表示常量 123e3表示123*10^3
2.333e-1 就是合法的,且数据是 2.333×10^-1 - 以f结尾的实型常量,为float类型,无f则定为double类型
- float:7位有效数字 指数-37到38
double:16位有效数字 指数:-307到308
注意:printf();输出浮点类型时,自动设置最多输出小数点后6位
- 指数形式表示常量 123e3表示123*10^3
**笔记更新中**