说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!


源文件—添加—新建项





宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
检查语法,将预处理后文件编译生成汇编文件
将汇编文件生成目标文件(二进制文件.o)
设置运行环境,堆栈等,链接其他库;C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

预处理:gcc -E hello.c -o hello.i
编 译:gcc -S hello.i -o hello.s
汇 编:gcc -c hello.s -o hello.o
链 接:gcc hello.o -o hello
| 选项 | 含义 |
|---|---|
| -o file | 指定生成的输出文件名为file |
| -E | 只进行预处理 |
| -S(大写) | 只进行预处理和编译 |
| -c(小写) | 只进行预处理、编译和汇编 |
| 文件后缀 | 含义 |
|---|---|
| .c | C 语言文件 |
| .i | 预处理后的 C 语言文件 |
| .s | 编译后的汇编文件 |
| .o | 编译后的目标文件 |
带#的语句就是预处理指令,预处理指令在预处理的时候处理了
头文件展开: #include

删除注释: 注释有两种方法: // /* */
宏替换: #define 代表是声明一个宏, 在预处理时会将宏给替代
预处理时 不会检查语法错误

条件编译: 条件不成立: #if 0 -> #endif 条件成立 #if 1 -> #endif

将预处理文件编译生成汇编文件

会检查语法错误

将汇编文件编译生成二进制文件.o

设置运行环境,堆栈等,链接其他库


gcc hello.c -o hello(还是经过:预处理、编译、汇编、链接的过程):

作用: 在程序中启动另一个程序
参数:要的是待启动程序的路径名

cpu > 寄存器 > 缓存 > 内存


将重新定义main方法中的代码块,取消汇编代码





打开调试下的内存窗口

打开调试下的监视窗口

查看a变量的内存地址,在监视窗口输入&a回车,然后在内存中搜索即可


//解决方法
#define _CRT_SECURE_NO_WARNINGS //这个宏定义最好要放到.c文件的第一行
#pragma warning(disable:4996) //或者使用这个