C编译过程

C编译过程_第1张图片

寻觅GCC

如果你已经安装了Clion,那么gcc就在根目录下。
如果没有,那么需要去minGW的官网下载安装。添加到环境变量中。
C编译过程_第2张图片

编写C代码

#include 

#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文件,这是一个文本文件,可以双击打开查看。
C编译过程_第3张图片
也可以使用gcc -E -o test.i main.c -P,得到简化的预编译文件,去掉了#注释。
C编译过程_第4张图片

编译

将预处理之后的C代码,编译成汇编代码,由高级语言代码翻译成低级语言代码。
将预编译后的源代码.i文件,编译后输出为汇编文件,后缀名一般用.s,输出仍然是文本文件。
gcc -S test.i -o test.s
C编译过程_第5张图片

汇编

将上一步生成的汇编代码,通过汇编器,将其转换成二进制目标代码,也就是.obj文件。
每一个.c文件编译到.obj文件,都需要经过预编译、编译、汇编三步。
输入汇编.s文件,输出指定平台的obj文件,后缀名一般用.o表示。这一步的结果是非文本文件。

链接

通过链接器,将上一步生成的二进制目标文件、启动文件、依赖的库文件,一并链接成一个可执行文件。
这一步的输出是对应平台的可执行文件,如Linux下的elf文件。
win下的指令为:gcc -o test.exe test.o
C编译过程_第6张图片

你可能感兴趣的:(c语言,开发语言)