C语言整体运行流程

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

一、翻译环境,在这个环境里,源代码被转换为可执行的机器指令;

二、执行环境,它用于实际执行代码。

翻译阶段由几个部分组成:

一、组成程序的每个(有可能有多个)源文件通过编译过程分别转换为目标代码(object code)。

二、各个目标文件由连接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。

编译过程又由几个阶段组成:

一、预处理器(preprocessor)处理,在这个阶段,预处理器在源代码上执行一些文本操作。例如,用实际值代替由 #define 指令定义的符号以及读入由 #include 指令包含的文件的内容。

二、源代码经过解析(parse),判断它的语句的意思,这个阶段是产生绝大多数错误和警告信息的地方,随后便产生目标代码。

编译过程流程图如下:

执行阶段由几个部分组成:

一、程序必须载入到内存中。在宿主环境中(也就是具有操作系统的环境),这个任务由操作系统完成。那些不是存储在堆栈中的尚未初始化的变量将在这个时候得到初始值。

二、程序执行。在宿主环境中,通常一个小型的启动程序与程序链接在一起。它负责处理一系列日常事务,如收集命令行参数以便程序能够访问它们。接着调用main函数,执行程序。

三、程序执行的最后一个阶段就是程序的终止。它可以由多种不同的原因引起。“正常”终止就是main函数返回。也有可能是由用户按下break键或者电话连接的挂起而终止,也有可能在执行过程中出现错误而自行中断。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-10 14:16:31

C语言整体运行流程的相关文章

MVC整体运行流程一(进入管道)

1.在浏览器输入 https://www.cnblogs.com/zhangmm96/发送一个HTTP到web服务器,Web服务器WIndows内核中的HTTP.SYS组件捕捉当前请求,该组件分析出是一个需要交给IIS服务器处理的HTTP请求时,就会把Request请求交给IIS来处理, 2.如果该请求有缓存就会直接响应, HTTP.SYS组件最重要的就是有一个缓存区,将近期处理请求缓存起来,提高响应速度,静态的文件会被缓存于内核模式下 3.IIS会分析Request氢气逇context-typ

Spark修炼之道(进阶篇)——Spark入门到精通:第九节 Spark SQL运行流程解析

1.整体运行流程 使用下列代码对SparkSQL流程进行分析,让大家明白LogicalPlan的几种状态,理解SparkSQL整体执行流程 // sc is an existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // this is used to implicitly convert an RDD to a DataFrame. import sqlContext.implicits

打造简洁高效的企业运行流程

市场萎缩.消费疲软.资金短缺--相信绝非一家企业的难题.如何破解市场困局,在实力相当.毅力相同的情况下,创新能力就成了取胜的关键.变革组织运行流程,实行流程重组,无疑是谋求企业发展的快捷方式之一.经济学家郎咸平教授2008年年底率先提出,国内企业要改变在全球产业链中6+1的地位,其中一项很重要的工作就是优化流程工序,提高产品附加值.郎教授惯于用通俗易懂的词句解释复杂的经济现象或管理理论.他曾用总结优化大厨制作"鱼香肉丝"的流程.提高饭店竞争力的例子,来说明流程优化对于企业发展的积极作用

我的全栈之路-C语言基础之C程序运行流程

我的全栈之路-C语言基础之C程序运行流程 我的全栈之路 4.1 C程序的运行流程 C语言编写的程序一般都要经过编写源文件->预处理->编译->汇编->链接后运行这几个流程. 预处理 预处理主要是宏替换.包含头文件.条件编译以及删除注释等操作,预编译阶段生成文件的后缀名通常是.i. 编译 编译主要是将预处理好的文件生成汇编文件,编译后文件的后缀名通常是.s. 汇编 汇编主要是将汇编文件生成二进制文件,汇编后的文件的后缀名通常是.o. 链接 链接主要是将各个二进制文件.库函数.启动代码

分布式任务调度平台SIA-TASK的架构设计与运行流程

一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台. 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题.通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器

宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程

一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台. 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题.通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器

<01>主函数分析+创建一个新的Target+C语言程序执行流程

1.C语言的源程序的后缀:.c格式 2.C语言源程序: 1)由函数构成 2)在一个程序中,只有一个主函数(主函数由系统调用) 3)函数只有被调用的时候,才执行 4)如果没有主函数程序无法运行 5) C语言中语句结束一定要有分号 3.主函数的写法: int main(){ printf("hello world"); return 0; } 4.C语言程序的执行 1)command+r 2)点击左上角的 三角 符号 //Program ended with exit code: 0  程

Thinkphp3.2新手篇之系统运行流程1

如果公司使用的tp框架,那么作为新人在首先会被要求了解tp的系统运行流程,本文章意在帮助新童鞋快速了解tp系统流程.流程说明按照tp手册给出的进行(序号也相同,方便大家查看): 1.用户URL请求,2.调用应用入口文件(这里以index.php为例) 大部分网站是利用url重写隐藏了index.php的,这里的方法请查看tp手册.首先执行index.php, 1 // 应用入口文件 2 3 // 检测PHP环境 4 if(version_compare(PHP_VERSION,'5.3.0','

grunt源码解析:整体运行机制&grunt-cli源码解析

前端的童鞋对grunt应该不陌生,前面也陆陆续续的写了几篇grunt入门的文章.本篇文章会更进一步,对grunt的源码进行分析.文章大体内容内容如下: grunt整体设计概览 grunt-cli源码分析 grunt-cli模块概览 grunt-cli源码分析 写在后面 grunt整体设计概览 grunt主要由三部分组成.其中,grunt-cli是本文的讲解重点 grunt-cli:命令行工具,调用本地安装的grunt来运行任务,全局安装. grunt:本地grunt,一般安装在项目根目录下.主要