寻觅GCC
如果你已经安装了Clion
,那么gcc
就在根目录下。
如果没有,那么需要去minGW
的官网下载安装。添加到环境变量中。
编写C代码
#include <stdio.h>
#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])
static int a = 123;
int main() {
int i = 0;
const char *msg = "hello";
unsigned char b[3] = {1, 2, 3};
char *result = (a > 0) ? "OK" : "FAIL";
printf("666\n");
printf("%s ", msg);
for (int i = 0; i < ARRAY_SIZE(b); ++i) {
printf("%d ", b[i]);
}
printf(" %s \r\n", result);
return 0;
}
以肯哥讲义为例,命名为main.c
预编译
预编译包括宏展开、头文件包含、条件编译等。
在main.c
所在文件夹执行命令:gcc -E -o test.i main.c
会得到test.i
文件,这是一个文本文件,可以双击打开查看。
也可以使用gcc -E -o test.i main.c -P
,得到简化的预编译文件,去掉了#
注释。
编译
将预处理之后的C
代码,编译成汇编代码,由高级语言代码翻译成低级语言代码。
将预编译后的源代码.i
文件,编译后输出为汇编文件,后缀名一般用.s
,输出仍然是文本文件。
gcc -S test.i -o test.s
汇编
将上一步生成的汇编代码,通过汇编器,将其转换成二进制目标代码,也就是.obj
文件。
每一个.c
文件编译到.obj
文件,都需要经过预编译、编译、汇编三步。
输入汇编.s
文件,输出指定平台的obj
文件,后缀名一般用.o
表示。这一步的结果是非文本文件。
链接
通过链接器,将上一步生成的二进制目标文件、启动文件、依赖的库文件,一并链接成一个可执行文件。
这一步的输出是对应平台的可执行文件,如Linux下的elf
文件。
win下的指令为:gcc -o test.exe test.o