目录

1. 程序的翻译环境和执行环境

2. 详解编译+链接

2.1 翻译环境

2.2 编译本身也分几个阶段

2.3 运行环境


1. 程序的翻译环境和执行环境

在ANSI C的任何一种实现中,存在两个不同的环境。

第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。

2. 详解编译+链接

2.1 翻译环境

  • 组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。
  • 每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。
  • 链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人 的程序库,将其需要的函数也链接到程序中。

2.2 编译本身也分几个阶段

test.c代码:

#include<stdio.h>//声明函数
extern int Add(int x,int y);
int main()
{int a = 1;int b = 2;int ret = Add(a,b);printf("%d\n",ret);return 0;
}

Add.c代码:

int Add(int x,int y)
{return x+y;
}

2.3 运行环境

程序执行的过程:

  1. 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
  2. 程序的执行便开始。接着便调用main函数。
  3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack)(函数栈帧),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
  4. 终止程序。正常终止main函数;也有可能是意外终止。

史上最强C语言教程----程序的编译与预处理(1)相关推荐

  1. 史上最强C语言教程----程序的编译与预处理(2)

    目录 3.预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3 #define 替换规则 3.2.4 #和## ...

  2. 二十万字带你入门C语言-史上最强C语言教程(汇总篇)

    一.前言 至此,史上最强C语言教程系列已经全部完成,今天是给大家来做一个汇总,笔者目前已经完成了C语言阶段的学习,一直以来感谢大家的陪伴与支持,笔者后续还会继续更新C++.数据结构.Linux.Mys ...

  3. 史上最强C语言教程----操作符详解

    目录 1.操作符分类 2.算术操作符 3.移位操作符 3.1 左移操作符 3.2 右移操作符 4.位操作符 5.赋值操作符 赋值操作符 复合赋值符 6.单目操作符 6.1 单目操作符介绍 6.2 si ...

  4. 史上最强C语言教程----位段

    目录 1.1 什么是位段 1.2 位段的内存分配 1.3 位段的跨平台问题 1.1 什么是位段 位段的声明和结构是类似的,有两个不同: 1.位段的成员必须是 int.unsigned int 或sig ...

  5. 史上最强C语言教程----指针(初阶)

    目录 1.指针是什么? 2. 指针和指针类型 2.1 指针+-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针+-整数 4.2 指针- ...

  6. 史上最强HashMap面试教程

    前言 写这篇文章的目的是因为我大学四年的室友,龙哥在培训java,刚好最近学习HashMap,于是我写一篇文章来模拟他以后面试被问到HashMap的场景:另外就是因为HashMap的使用确实广泛,深受 ...

  7. android下怎样伪装mac,Android刷成iOS?史上最强苹果伪装教程

    智能手机的最大乐趣就在于"倒腾",不过由于系统不同,通常就会根据用户数量的多寡分出几大派系.目前智能手机中的两大派系就是iOS与Android,排挤也好.嘲笑也罢,二者之间有着永远 ...

  8. 史上最强像素画教程「Pixel Art2」像素食物構圖教學本

    转载,成体系很良心,并且免费 感谢千穗!!! 作者官网:https://www.doujin.com.tw/authors/info/yinshi 作者:此非名 https://www.bilibil ...

  9. 史上最强像素画教程「Pixel Art」像素画入门教学本

    转载,成体系很良心,并且免费 感谢!!! 作者官网:https://www.doujin.com.tw/authors/info/yinshi

最新文章

  1. 对于有A[0…N]有序的数组,判断是否存在A[i]=I 如果存在的话返回Index,
  2. C# 去重处理字符大小写
  3. docker部署nessus+awvs
  4. pg_resetxlog清理的pg_xlog下的WAL日志
  5. MapReduce算法设计(三)----相对频率计算
  6. ubuntu下的jdk进行升级_Ubuntu下JDK升级1.7
  7. 正则与pandas处理行数据
  8. java键盘代码_java中各种类型的键盘输入代码是什么
  9. ADM2587E外围电路设计
  10. 企业服务总线ESB是什么
  11. win7计算机序列号在哪里,win7系统如何查看主板序列号?win7系统查看主板序列号的详细步骤图文教程...
  12. 如何清理电脑系统缓存
  13. Dell戴尔笔记本电脑G16 7620原装出厂Windows11系统恢复原厂oem系统
  14. 【论文翻译】Frustratingly Simple Few-Shot Object Detection
  15. Keras深度学习实战(11)——可视化神经网络中间层输出
  16. 2022磺化工艺考试模拟100题及答案
  17. python之面向对象的程序设计(一)
  18. Python找出列表中重复元素
  19. dht java_一个java版本的dht网络爬虫,伪装dht节点获取hashinfo
  20. 探索云原生技术之容器编排引擎-Kubernetes/K8S详解(6)

热门文章

  1. matlab力学大作业答案,结构力学大作业-matlab-矩阵位移
  2. 机器学习之train_test_split详解
  3. 马蜂窝“评论造价事件”,是事实?还是被人坑了?
  4. 订单模块业务处理流程梳理记录
  5. iTunes for Windows 64bit 下载
  6. 【体系结构 三 流水线技术】
  7. sql calculate time difference
  8. CE标志有何重要意义(转载)
  9. Linux MMC 驱动子系统详解
  10. DEAP 情绪数据集介绍