史上最强C语言教程----程序的编译与预处理(1)
目录
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 运行环境
程序执行的过程:
- 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
- 程序的执行便开始。接着便调用main函数。
- 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack)(函数栈帧),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。
- 终止程序。正常终止main函数;也有可能是意外终止。
史上最强C语言教程----程序的编译与预处理(1)相关推荐
- 史上最强C语言教程----程序的编译与预处理(2)
目录 3.预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3 #define 替换规则 3.2.4 #和## ...
- 二十万字带你入门C语言-史上最强C语言教程(汇总篇)
一.前言 至此,史上最强C语言教程系列已经全部完成,今天是给大家来做一个汇总,笔者目前已经完成了C语言阶段的学习,一直以来感谢大家的陪伴与支持,笔者后续还会继续更新C++.数据结构.Linux.Mys ...
- 史上最强C语言教程----操作符详解
目录 1.操作符分类 2.算术操作符 3.移位操作符 3.1 左移操作符 3.2 右移操作符 4.位操作符 5.赋值操作符 赋值操作符 复合赋值符 6.单目操作符 6.1 单目操作符介绍 6.2 si ...
- 史上最强C语言教程----位段
目录 1.1 什么是位段 1.2 位段的内存分配 1.3 位段的跨平台问题 1.1 什么是位段 位段的声明和结构是类似的,有两个不同: 1.位段的成员必须是 int.unsigned int 或sig ...
- 史上最强C语言教程----指针(初阶)
目录 1.指针是什么? 2. 指针和指针类型 2.1 指针+-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针+-整数 4.2 指针- ...
- 史上最强HashMap面试教程
前言 写这篇文章的目的是因为我大学四年的室友,龙哥在培训java,刚好最近学习HashMap,于是我写一篇文章来模拟他以后面试被问到HashMap的场景:另外就是因为HashMap的使用确实广泛,深受 ...
- android下怎样伪装mac,Android刷成iOS?史上最强苹果伪装教程
智能手机的最大乐趣就在于"倒腾",不过由于系统不同,通常就会根据用户数量的多寡分出几大派系.目前智能手机中的两大派系就是iOS与Android,排挤也好.嘲笑也罢,二者之间有着永远 ...
- 史上最强像素画教程「Pixel Art2」像素食物構圖教學本
转载,成体系很良心,并且免费 感谢千穗!!! 作者官网:https://www.doujin.com.tw/authors/info/yinshi 作者:此非名 https://www.bilibil ...
- 史上最强像素画教程「Pixel Art」像素画入门教学本
转载,成体系很良心,并且免费 感谢!!! 作者官网:https://www.doujin.com.tw/authors/info/yinshi
最新文章
- 对于有A[0…N]有序的数组,判断是否存在A[i]=I 如果存在的话返回Index,
- C# 去重处理字符大小写
- docker部署nessus+awvs
- pg_resetxlog清理的pg_xlog下的WAL日志
- MapReduce算法设计(三)----相对频率计算
- ubuntu下的jdk进行升级_Ubuntu下JDK升级1.7
- 正则与pandas处理行数据
- java键盘代码_java中各种类型的键盘输入代码是什么
- ADM2587E外围电路设计
- 企业服务总线ESB是什么
- win7计算机序列号在哪里,win7系统如何查看主板序列号?win7系统查看主板序列号的详细步骤图文教程...
- 如何清理电脑系统缓存
- Dell戴尔笔记本电脑G16 7620原装出厂Windows11系统恢复原厂oem系统
- 【论文翻译】Frustratingly Simple Few-Shot Object Detection
- Keras深度学习实战(11)——可视化神经网络中间层输出
- 2022磺化工艺考试模拟100题及答案
- python之面向对象的程序设计(一)
- Python找出列表中重复元素
- dht java_一个java版本的dht网络爬虫,伪装dht节点获取hashinfo
- 探索云原生技术之容器编排引擎-Kubernetes/K8S详解(6)