C 语言动态内存

C 语言数学

C 语言命令行

C语言中的编译过程

什么是汇编?

编译是将源代码转换为目标代码的过程。它是在编译器的帮助下完成的。编译器检查源代码的语法或结构错误,如果源代码没有错误,则生成目标代码。

c中的编译过程

c 编译过程将作为输入的源代码转换为目标代码或机器代码。编译过程可以分为四个步骤,即预处理、编译、汇编和链接。

预处理器将源代码作为输入,并从源代码中删除所有注释。预处理器采用预处理器指令并对其进行解释。例如,如果<stdio.h>指令在程序中可用,则预处理器解释该指令并将该指令替换为“stdio.h”文件的内容。

以下是我们的程序在转换为可执行形式之前所经过的阶段:

  • 预处理器

  • 编译器

  • 汇编器

  • 链接器

c中的编译过程

预处理器

源代码是在文本编辑器中编写的代码,源代码文件的扩展名为“.c”。此源代码首先传递给预处理器,然后预处理器扩展此代码。展开代码后,将展开后的代码传递给编译器。

编译器

预处理器扩展的代码被传递给编译器。编译器将此代码转换为汇编代码。或者我们可以说 C 编译器将预处理后的代码转换为汇编代码。

汇编器

使用汇编程序将汇编代码转换为目标代码。汇编器生成的目标文件的名称与源文件相同。目标文件在 DOS 中的扩展名是“.obj”,在 UNIX 中,扩展名是“o”。如果源文件的名称是“hello.c”,那么目标文件的名称就是“hello.obj”。

链接器

主要是,所有用 C 编写的程序都使用库函数。这些库函数是预编译的,这些库文件的目标代码以“.lib”(或“.a”)扩展名存储。链接器的主要工作是将库文件的目标代码与我们程序的目标代码结合起来。有时当我们的程序引用其他文件中定义的函数时会出现这种情况;那么链接器在其中起着非常重要的作用。它将这些文件的目标代码链接到我们的程序。因此,我们得出结论,链接器的工作是将我们程序的目标代码与库文件和其他文件的目标代码链接起来。链接器的输出是可执行文件。可执行文件的名称与源文件相同,只是扩展名不同。在 DOS 中,可执行文件的扩展名为'.exe',在UNIX 中,可执行文件可以命名为'a.out'。例如,如果我们在程序中使用 printf() 函数,那么链接器会将其相关代码添加到输出文件中。

让我们通过一个例子来理解。

hello.c

例子 (Example)

#include <stdio.h>  
int main()  
{  
    printf("Hello Rocschool");  
    return 0;  
}

现在,我们将创建上述程序的流程图:

c中的编译过程

在上面的流程图中,采取以下步骤来执行程序:

  • 首先,输入文件,即hello.c,被传递给预处理器,预处理器将源代码转换为扩展源代码。扩展源代码的扩展名为hello.i。

  • 扩展后的源代码被传递给编译器,编译器将这个扩展后的源代码转换成汇编代码。汇编代码的扩展名是hello.s。

  • 然后将该汇编代码发送到汇编程序,汇编程序将汇编代码转换为目标代码。

  • 创建目标代码后,链接器创建可执行文件。然后加载程序将加载可执行文件以供执行。


  • 使用社交账号登录,本站支持
全部评论(0)