编译
-
预处理
gcc -E hello.c -o hello.i
gcc -E -P hello.c -o hello.i
将头文件拷贝至源文件(头文件展开)、丢弃注释、宏替换、条件编译
不会检查语法错误
#:预处理指令
-
#include
-
#define
:宏定义
// 条件编译 #if expression(如0、1) statement #endif e.g. #if abc printf("hello"); #endif gcc -E hello.c -o hello.i -D abc 即可在编译生成条件编译内的printf语句
.i
:c的预处理文件 -
-
编译
gcc -S hello.i hello.s
将预处理文件转为汇编文件
会检查语法错误
.s
:汇编文件 -
汇编
gcc -c hello.s -o hello.o
将汇编文件编译成从二进制文件(c文件中可直接书写汇编指令)
// VS中嵌套汇编指令 int main() { int a,b,c; __asm { mov a, 3 // a = 3 mov b, 4 // b = 4 mov eax, a // 把a内存的值放入eax寄存器 add eax, b // 把b内存的值加入eax寄存器 mov c, eax // eax的值放入c内存 } printf("%d", c); return 0; }
.o
:二进制文件 -
链接
gcc hello.o -o hello或hello.exe
设置运行环境、堆栈等,链接库文件
// 在程序中启动另一个程序
#include <stdlib.h>
int main() {
system("smpaint"); // 启动画图板
system("D:\\hello.exe"); // system("D:/hello.exe");
system("pause"); // 启动pause程序(等待用户输入任意键后继续执行)
return 0;
}
#include <windows.h>
int main