C语言程序执行全流程

其实下面的步骤知道大概就行了~不用每个都详细了解(OS:你就算只知道编辑编译链接执行这四个阶段都不影响学习的)

C 语言程序的执行过程涉及多个步骤,在编译前主要有编辑阶段。以下是 C 语言程序从编写到执行的完整顺序及各阶段的详细介绍:

编辑阶段

  • 文本编写:程序员使用文本编辑器(如 Visual Studio Code、Sublime Text、Vim 等)编写 C 语言代码,将算法和逻辑以文本形式输入到源文件中,源文件通常以 .c 为后缀名。
  • 保存文件:在编写过程中,需要定期保存文件,确保代码不会丢失。保存的文件就是后续编译等操作的基础。

编译阶段

  • 预处理
    • 宏展开:对代码中的宏定义进行展开,将宏名替换为对应的宏体内容,如 #define PI 3.14159 这样的宏定义,会在预处理阶段将代码中所有的 PI 替换为 3.14159
    • 文件包含:处理 #include 指令,将指定的头文件内容插入到源文件中相应的位置。例如 #include  会将标准输入输出头文件的内容包含进来。
    • 条件编译:根据 #ifdef#ifndef#else#endif 等条件编译指令,决定哪些代码需要参与编译,哪些代码需要被忽略。
  • 编译
    • 词法分析:编译器将源程序的字符流按照词法规则识别为一个个单词,如将 int num = 10; 识别为 int(关键字)、num(标识符)、=(运算符)、10(常量)、;(界符)等。
    • 语法分析:基于词法分析得到的单词序列,按照 C 语言的语法规则进行分析,构建语法树。例如,对于语句 if (a > 10) { b = 20; },会构建出反映该语句语法结构的语法树。
    • 语义分析:检查语法结构的语义是否正确,如变量是否声明、类型是否匹配等。例如,若将一个整型变量赋值给一个指针变量,语义分析就会检测出这是一个错误。
    • 代码生成:经过前面的分析后,编译器将源程序转换为目标机器的汇编语言或机器语言代码。
  • 汇编:汇编器将编译生成的汇编代码转换为机器语言目标代码,生成以 .obj 为后缀的目标文件,目标文件包含了机器语言指令和数据,但还不能直接运行。

链接阶段

  • 合并目标文件:将多个目标文件(可能包括自己编写的多个 .c 文件生成的目标文件以及使用的库文件等)合并在一起。
  • 符号解析:解决目标文件中符号(如函数名、变量名等)的引用问题,将各个目标文件中的符号引用与实际的定义进行匹配和关联。
  • 生成可执行文件:链接器将所有的目标文件和库文件进行整合,生成最终的可执行文件,在 Windows 系统中通常以 .exe 为后缀,在 Linux 系统中通常没有特定后缀。

执行阶段

  • 加载到内存:操作系统将可执行文件加载到内存中,为程序分配内存空间,包括代码段、数据段、堆栈段等。
  • 执行程序:CPU 从程序的入口点开始执行指令,按照程序的逻辑顺序依次执行各个语句,进行数据处理、运算、输入输出等操作。
  • 结束运行:程序执行完所有的指令或遇到结束语句(如 return 0;)后,退出运行,操作系统回收程序占用的资源。

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