gcc编译流程
1.预处理
处理和#相关的代码
1.注释,条件编译
#if 0
#elif
#else
#endif
#ifndef _HEADERNAME_H
#define _HEADERNAME _H
//代码
#ENDIF
满足条件的代码编译
2.#include
3.# define PI 3.14
只进行预处理
gcc -E filename.c -o filename.i
2.编译
将c语言编译成汇编
gcc -S filename.c -o filename.s
3.汇编
汇编翻译成二进制文件
gcc - C filename.c -o filename.o
4.链接
将多个二进制代码链接成可执行程序
进制
0B 二进制前缀Binary
0O 或 空格0 八进制前缀Octal
十进制 Decimal
0x 十六进制前缀Hexadecimal
基本数据类型
整数类型
分为有符号与无符号类型
1111 1111 1111 1111 + 1 = 2^16 - 1
32767
short | 2字节 | signed short unsigned short | 2^16 - 1 0~65535 2^15 - 1 -32768~32767 |
int | 4字节 | signed int unsigned int | -21亿~21亿 0~42亿 |
long | 8字节 | signed long unsigned long | -2^63~2^63 - 1 2^64 - 1 |
不写singned 整数默认有符号类型
二进制补码形式存放
字符类型
分为有符号与无符号类型
char 1个字节
unsigned char 0~255
sign char -128~127
字符和二进制转换关系
a----97(十进制)
A----65 差值32
'0' ---- 48
浮点数类型
浮点数全为有符号类型
float 4字节
0 0000000 0 0000000 00000000 00000000
符号位 指数位 尾数位 1 8
exp :
8.75
1000.11 1.00011 x 2^3
3 + 127 = 130 指数位,+127方便负数计数(double + 1024)
127 + 128 = 255(8位最大数字)
0 10000010 00011......
6-8位有效数字
double 8字节
(1符号,11指数,52位数)
15-16位有效数字
缺省类型
void
逻辑类型(布尔类型) #include<stdbool.h>
bool true:1 非0均为逻辑真值 flase:0
bool val = 5;/bool val = true; printf("%d",val); // 结果都为1,不能使用%s
字符串末尾存在\0字符,字符没有
宏定义
代码文本替换,为了安全注意括号使用
#define repeat do
#define until(x) while( ! (x) ) -----#define until(i < 10) while(...... )
//创建了新的数据类型
repeat{ }until(i < 10) do { }while(!(i <10))