前言
数据类型和编译过程
一、分步编译:
i. 预处理: 头文件展开 宏替换 删除注释 不会进行语法检测
gcc -E hello.c > hello.i
gcc -E hello.c -o hello.i
ii. 编译: 生成汇编文件:
1. 语法分析:
2. 词法分析:
3. 语义分析
4. 统计符号
gcc -S hello.i -o hello.s
iii. 汇编:转换为二进制文件
1. 统计符号
2. 制作符号表
gcc -c hello.s -o hello.o
vi. 链接: 生成可执行的二进制文件
1. 合并符号表
gcc hello.o -o hello
二、数据类型
1.变量
定义:程序运行过程中发生变化的量
语法格式:存储类型 数据类型 标识符
数据类型 决定变量占据内存的大小
标识符 内存空间的名称
demo:
变量声明:int 变量名;//没有分配内存
声明提升:系统赋予一个随机值
int num;未分配内存
int num=10;分配空间
2.常量
定义:程序运行过程中不变的量;
分类:整型常量 字符串常量 字符常量 标识常量(宏定义)
3.宏定义
符号定义常量
#define 标识符 常量
#define MONTH 12 //没有分号
特点:
1.结尾没有“;”号
2.一般全大写
3.预处理阶段进行替换
4.替换掉魔鬼数字
5.宏是原样替换,计算过程中不增加()
例如:
#define M 10
#define N M + 5
int main()
{
printf("2 * N = %d", 2 * N) ; // 30
2 * M + 5
2 * 10 + 5 = 25
printf("N * N = %d", N * N ); // 225
M + 5 * M + 5 = 65
return 0;
}