精华内容
下载资源
问答
  • C语言中for语句的执行过程是怎样的发布时间:2020-07-27 13:48:19来源:亿速云阅读:122作者:Leah这期内容当中小编将会给大家带来有关C语言中for语句的执行过程是怎样的,文章内容丰富且以专业的角度为大家分析和...

    C语言中for语句的执行过程是怎样的

    发布时间:2020-07-27 13:48:19

    来源:亿速云

    阅读:122

    作者:Leah

    这期内容当中小编将会给大家带来有关C语言中for语句的执行过程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C语言中for语句的执行过程是:1、会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 ;2、在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续重复中间循环体,当条件不成立时则跳出。

    C语言中for语句的执行过程是:

    for语句的一般形式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}。

    for循环执行时,会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 。在执行完末尾循环体后对条件表达式再次进行判断,若条件还成立,则继续重复中间循环体,当条件不成立时则跳出for循环。

    for循环中执行的中间循环体可以为一个语句,也可以为多个语句,当中间循环体只有一个语句时,其大括号{}可以省略。

    2f6adc0b70bfe359fd572aede628065f.png

    扩展资料

    for语句的注意事项:

    1、for循环中的变量可以是一个也可以是多个,不要局限于一个变量处理到底,那样有时会很单调,当程序适合把多个变量组成循环时,用多个for语句来表示就是有些浪费了。

    2、for循环中语句可以为语句体, 语句体外加大括号"{}"将参加循环的语句括起来。 for循环的三个表达式都是逗号表达式,这样来说,其实每个分号表达式可以由几个逗号表达式构成,中间用",”隔开,最后以“;”结束。

    3、for循环中的"单次表达式"、"条件表达式"和"循环体语句"都是选择项, 即可以缺省成只剩下“;”的空语句, ";"不能缺省的原因是编译格式如此,缺省了编译器不认识而会报错。

    上述就是小编为大家分享的C语言中for语句的执行过程是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

    展开全文
  • C语言编译执行过程

    千次阅读 2019-09-27 10:14:57
    一、C语言的编译执行过程 我们在C语言编辑的文件是以.c为文件拓展名的,称为源文件;C语言编译器的功能就是将源文件,经过编译、链接之后可以形成可执行文件 那么具体的步骤是什么呢? C源程序头文件-->预...

    一、C语言的编译执行过程

    我们在C语言编辑的文件是以.c为文件拓展名的,称为源文件;C语言编译器的功能就是将源文件,经过编译、链接之后可以形成可执行文件

    那么具体的步骤是什么呢?

    C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件

    二、编译执行过程详解

    第一步:在编辑器中编辑源文件

    第二步:编译预处理;

    预处理的作用就是读取源文件中的字符流,对伪指令和特殊符号进行处理

    预编译程序的功能是将源文件中的特殊内容进行替换,但是不会改变源文件的含义,预编译程序的输出文件将作为下一步操作的原始文件

    伪指令(以#开头的指令)和特殊符号包括以下四种类型:

     1.宏定义指令:#define、#undef......#define Name *** 的功能是将源文件中的Name全部替换为***,而#undef的功能是取消某个宏的定义,使其不再生效

     2.条件定义指令:#ifdef、#ifndef、#endif等,这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译工具对哪些代码进行处理,可以通过此方法过滤掉无用代码

     3.头文件包含指令:#include< >、#include" ",使用头文件的目的是使得某些定义可以被多个源程序引用,预编译程序将头文件中的定义加入到其输出文件中,以便编译程序能够对其进行处理;

     两者的区别为#include< >引用的是系统提供的头文件,而#include" "引用的为用户自定义头文件,其文件存放位置必须和源文件在同一路径

     4.特殊符号:预编译程序可以识别一些特殊符号,例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称

     

    此外,在预处理阶段,编译器会删除注释内容,"//"和"/*"的内容,并且会添加代码行号和文件标识,便于在后续过程中输出报错信息时定位到错误位置

    第三步:编译

    经过预编译程序的处理,其输出文件将只包含变量。如数字、字符串、变量的定义,其工作就是将预编译处理程序进行语法检查和语句检查,确认语句符合规范之后,将其翻译为中间代码或者汇编代码

    第四步:优化

    优化是编译程序中的重要部分,它涉及到的问题不仅包括编译技术,还与机器的硬件环境有很大的关系

    优化过程分为两种:一是对中间代码的优化,另一种是针对目标代码进行的生成进行的优化

    第一种优化的主要方式是删除公共表达式以及循环优化,此方式不依赖计算机硬件平台,主要包括代码外提、强度削弱、变换循环控制条件、已知量的合并、复写传递以及无用赋值的删除

    第二种优化则依赖硬件环境,最主要的问题是充分利用硬件的寄存器来保存有关变量的值,以减少内存访问次数,此外,根据机器硬件的指令特点将代码量减少以及增加代码执行效率也是很重要的问题

    经过优化的代码必须经过汇编程序的汇编转化为机器指令才能够正常执行

    第五步:汇编

    汇编过程的主要功能是将汇编代码转化为机器指令,目标文件存放的就是和源文件相对应的机器指令

    目标文件通常由段组成:数据段和代码段

    代码段中包含的主要是程序的指令,一般文件权限是可读可执行但不可写

    数据段中包含的主要是各种全局变量或静态变量的数据,一般文件权限为可读可写可执行

     

    汇编程序生成的是可重定位文件,其中包含了其它目标文件链接来创建一个可执行文件或共享的目标文件所需的代码和数据

    第六步:链接

     由汇编程序生成的目标文件并不能被直接执行,它可能还存在着许多的问题

     例如:某个源文件中的函数引用了另一个源文件中的内容,或者在程序中调用了函数库中的函数,解决这些问题必须进行链接这一过程

     链接过程的主要功能是将有关目标文件相互连接,也就是将在某文件中对其它文件的引用与另一个文件中此引用的定义链接,使得这些目标文件能够被操作系统装入执行的整体

     根据开发人员同库函数的链接方式的不同, 链接方式可分为:静态链接和动态链接

    • 静态链接:在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行文件中,这样该程序在执行时,相关代码将被装载到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中每个文件含有库中的一个或一组相关函数的代码
    • 动态链接:在这种链接方式下,函数的代码被放到动态链接库或共享对象的某个目标文件中。链接程序所做的就是在最终的可执行程序中记录下共享对象的名字以及相关登记信息。在可执行文件运行时,动态链接库中的所有内容都被映射到相应进程的虚地址空间中,可执行程序再根据相关登记信息找到相关执行代码

     

    经过上述过程,C源程序就转化为了可执行程序,默认可执行程序的名字为a.out(Linux环境下)

    三、编译过程中的文件类型

    •        在Windows平台上,C语言源代码文件一般扩展名为.c,目标文件扩展名一般为.obj,生成的可执行文件扩展名一般为.exe
    •   在Linux平台上,C语言源代码文件一般扩展名为.c,预处理操作后的文件名扩展名一般为.i,编译器生成的汇编代码一般扩展名为.s,生成的可执行文件一般扩展为.out,它是有汇编器生成的,所以默认gcc生成的程序名为a.out意思即为Assembler output
    • UNIX环境下主要有三种类型的目标文件:

      (1)可重定位文件  其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据

      (2)共享的目标文件  这种文件存放了适合于在两种上下文里链接的代码和数据。第一种事链接程序可把它与其它可重定位文件及共享的目标文件一起处理来创建另一个目标文件;第二种是动态链接程序将它与另一个可执行文件及其它的共享目标文件结合到一起,创建一个进程映象

      (3)可执行文件 它包含了一个可以被操作系统创建一个进程来执行的文件

    参考链接:http://lavasoft.blog.51cto.com/62575/187229

    展开全文
  • C语言中for语句的执行过程是:1、会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 ;2、在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续重复...

    C语言中for语句的执行过程是:1、会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 ;2、在执行完末尾循环体后对条件表达式再次判断,若条件还成立,则继续重复中间循环体,当条件不成立时则跳出。

    4e043cc7b45956836145a3478ba08a9d.png

    C语言中for语句的执行过程是:

    for语句的一般形式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}。

    for循环执行时,会先判断条件表达式是否成立,如果条件成立则执行中间循环体,执行完中间循环体后接着执行末尾循环体 。在执行完末尾循环体后对条件表达式再次进行判断,若条件还成立,则继续重复中间循环体,当条件不成立时则跳出for循环。

    for循环中执行的中间循环体可以为一个语句,也可以为多个语句,当中间循环体只有一个语句时,其大括号{}可以省略。

    0c00824b31e19e69694efe7e6e069ac3.png

    扩展资料

    for语句的注意事项:

    1、for循环中的变量可以是一个也可以是多个,不要局限于一个变量处理到底,那样有时会很单调,当程序适合把多个变量组成循环时,用多个for语句来表示就是有些浪费了。

    2、for循环中语句可以为语句体, 语句体外加大括号"{}"将参加循环的语句括起来。 for循环的三个表达式都是逗号表达式,这样来说,其实每个分号表达式可以由几个逗号表达式构成,中间用",”隔开,最后以“;”结束。

    3、for循环中的"单次表达式"、"条件表达式"和"循环体语句"都是选择项, 即可以缺省成只剩下“;”的空语句, ";"不能缺省的原因是编译格式如此,缺省了编译器不认识而会报错。相关学习推荐:C视频教程

    展开全文
  • c语言函数执行过程(来源老师讲课)int fun(int a, int b);int m=10;int main(){int i=4;int j=5;m = fun(i,j);return 0;}int fun(int a, int b){int c=0;c = a+b;return c;}C程序运行的核心函数的执行和调用。接...

    c语言函数执行过程(来源老师讲课)

    int fun(int a, int b);

    int m=10;

    int main()

    {

    int i=4;

    int j=5;

    m = fun(i,j);

    return 0;

    }

    int fun(int a, int b)

    {

    int c=0;

    c = a+b;

    return c;

    }

    C程序运行的核心是函数的执行和调用。

    接下来将介绍内存中函数调用的基本情景,指令如何驱动数据压栈、清栈。

    92bf7496831dbdcddd2efea668975a9a.png 首先我们介绍函数调用的内存中的三个区域(如上图):

    代码区

    代码区装载了这个程序所对应的机器指令

    程序的执行就靠这些指令来驱动

    静态数据区

    装载了全局变量m的数值10

    后面程序的执行会改变这里的值

    动态数据区

    初始什么都没有,因为只有程序执行后,在指令的驱动下,这个区域才会产生数据。

    压栈、清栈的工作就是在这个区域完成的。

    程序的执行会导致动态、静态数据区中数据的变化,知道执行完毕。

    CPU中有三个寄存器,分别是eip、ebp、esp

    eip永远指向代码区将要执行的下一条指令,执行方式有两种

    顺序执行,执行完一条指令跳转到下一条指令

    跳转,执行时eip跳转到指定的位置执行指令

    ebp和esp用于管理栈空间,ebp指向栈底,esp指向栈顶,代码区中的函数调用、返回和执行都伴随着不断的压栈和清栈。

    栈中数据存储和释放的原则:后进先出

    main函数栈的构建如下图

    179cc0fe306404a15741a0ab6580eda0.png 初始情况,eip指向main函数的第一条指令,程序还未执行,栈空间也还没有数据,ebp和esp指向的位置十四程序加载时内核设置的。

    在程序开始执行main函数的第一条指令时,eip自动指向下一条指令,ebp会把初始ebp地址保存在栈中,目的是本程序执行完毕后,ebp还能回到现在的位置使现在的栈复原,esp会自动向栈顶方向移动,它永远指向栈顶。

    eip继续执行会开始构建main函数自己的栈,ebp会看管(指向)main的栈底。main函数建立成功时,实质性的代码还没有运行,栈中没有内容,栈顶、栈底重合,ebp、esp指向同一个给位置。

    接下来继续执行局部便令i、j的初始化,4、5两个数值会存到栈中,esp会继续移动到栈顶,两个局部变量都是属于main函数的。

    接下来调用fun函数时,用到的数据压入main函数栈中,但是这是由fun函数使用的。

    fun要使用到的数据一部分在自己的栈中,一部分在main函数的栈中。

    main函数会继续执行传参指令,参数入栈的顺序和书写的顺序正好相反,也就是先压入5,再压入4。

    接下来程序会为fun函数的返回值开辟一块空间,将来fun函数执行完毕返回时得到的返回值会存储到这里并且传递给全局变量m。

    接下来跳转到fun函数执行,这会分为两个部分,一部分把fun函数执行后的返回地址压入栈中,以便fun执行完毕后能够返回到main函数中执行。到这里函数调用数据准备工作完成。另一部分时跳转到被调函数的第一条指令去执行。

    fun函数执行过程如图

    4f30988cc33505218c4fec91e3889f2b.png 首先要保存ebp指向的地址值(此时还在main函数栈底),目的时返回时可以恢复main函数栈底的位置。

    接下来构建fun函数的栈,初始化结束后,ebp和esp都指向fun函数的栈底。

    继续执行会初始化局部变量为0,压入栈中。这里我们可以看到fun函数要用的数据:局部变量存在fun函数栈中,参数存在main函数栈中。

    通过以ebp为基点的寻址,很容易找到main和fun函数中的数据,且可以计算得到c=9。

    继续执行,局部变量c中的数据会当作返回值返回到之前为之开辟出来的位置,fun函数执行完毕。

    收尾工作(恢复现场)

    5a79839ebeb681bdee1fea7ceca13f74.png 恢复main函数调用fun的现场。

    main函数的栈要恢复(包括栈顶、栈底)

    找到fun函数执行后返回地址并返回到main函数中继续执行

    首先是ebp ,栈中之前存储了ebp的地址,会把地址回传给ebp,然后ebp会指回main函数栈底。

    栈会消栈,栈顶这时会移动到func执行后的返回地址位置,接下来会执行RET指令,此指令会自动把栈顶值给eip,使eip指向fun函数执行后的返回地址,此时恢复现场(main调用fun的过程)完毕,fun函数的返回值会传给全局变量m。

    接下来,处理调用fun时穿的参数,对于main来说参数没有存在的必要,需要清栈。

    思路还是不太清晰,希望各位多批评指正

    展开全文
  • C语言的编译器只是一个流处理器(Stream processor),它不关心代码是存放在哪里,甚至不看这个代码文件是什么,文件名是什么。 它只是做某种自动的检测(auto-detection,不关心),编译器在这个自动检测过程中做的...
  • c程序执行过程是从哪开始到哪里结束发布时间:2020-08-26 09:17:28来源:亿速云阅读:366作者:小新这篇文章主要介绍了c程序执行过程是从哪开始到哪里结束,具有一定借鉴价值,需要朋友可以参考下。...
  • C语言生成可执行文件的过程

    多人点赞 2021-02-15 11:07:05
    通过 gcc -E main.c -o main.i 执行c语言的预编译过程,生成main.o文件 让我们怀着敬畏的心情瞧一瞧生成的main.o文件啥样子 (因为篇幅原因,上面截图只展示原文件的几十分之一的代码) 可以发现最下面我们的源...
  • C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接把目标文件、操作系统的...
  • c语言的编译过程

    2013-12-24 19:38:15
    c语言的源代码在编译器看来只不过一堆字符串而已,在我们看来或许可以看得懂,但是在cpu看来会一堆什么都不是的乱码,只有用编译器将这些字符串编译成为二进制命令才可以执行。 编译的过程就是:首先把代码...
  • 代码由CPU执行的,而目前CPU并不能直接执行诸如if…else之类语句,它只能执行二进制指令。但是二进制指令对人类实在太不友好了:我们很难快速准确判断一个二进制指令1000010010101001代表什么?所以科学家...
  • c语言是一种面向过程、抽象的通用编程语言,广泛应用于底层开发。C语言虽然提供了很多低级的处理功能,但仍然保持了跨平台的特点。c程序的执行从主函数开始,到主函数结束。(学习视频分享:编程视频)c语言是一种面向...
  • (1)C语言是面向过程、编译型编程语言(与C++、Java等面向对象编程语言有所不同,ps:C与C++兼容),经过编译后最终形成可执行程序(即exe,可直接运行)。 (2)C语言非常经典,一般会在底层开发使用,...
  • C语言编译出来是机器码,程序执行过程是机器直接执行其机器码。 Java语言程序执行过程是,Java虚拟机(jvm)翻译Java字节码,然后将其转换成机器码告知机器运行。 同时Java语言是自动管理内存,所以他会追踪大...
  •  java第一次编译时编译成为自己可执行的.class文件(即字节码),而在程序真正运行过程需要将.class文件(字节码)加入虚拟机中一行一行解释执行的,所以java解释型语言,但也因此导致执行效...
  • 换个角度来问,其实:C语言在运行之前,得编译才行,那C语言的编译器从哪里来?用什么语言来写的?如果用C语言本身来写的,到底先有蛋还是先有鸡? 1 我们假设世界上不存在任何编译器, 先从机器语言说起,...
  • C语言程序转换过程

    千次阅读 2018-09-11 14:30:29
    什么是编译器,编译器作用又是什么? #include&amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; int main() { printf(&amp;amp;quot;hello,world\n&amp;amp;quot;); } 本文要点 预处理、编译、汇编...
  • C语言到机器语言的过程变化当我们写好一个helloword的程序,然后用gcc去...预编译,处理c语言的一些编译器关键字。 编译,从人类可以理解的c语言变到人类不容易理解的汇编语言。gcc -S main.c生成main.s 汇编,从汇编语
  • 可重定位目标文件以可以在链接时与其他可重定位目标文件组合形式包含机器代码,以形成可执行目标文件。如果您a.c有源文件,要使用GCC创建其目标文件,应运行: gcc a.c -c整个过程:预处理器(cpp)将在ac上运行...
  • 差不多每个程序员都知道,函数调用过程,就是层层入栈出栈的过程。 那么这个过程中的详细的细节是什么样子的呢? 阅读了以下几篇文章之后,对...栈底指针在函数的执行过程中是不变的,栈顶指针会随着函数的执行动...
  • C语言真正编译过程

    2018-04-25 11:11:36
    从一个源文件(.c)到可执行程序到底经历了哪几步,我想大多数人都知道,到时到底每一步都做了什么,我估计也没多少人能够说得清清楚楚,明明白白。其实总流程这样。【第一步】编辑hello.c1 #include &lt;...
  • C语言中编译过程简介

    2018-04-21 16:29:13
     本章节我们来聊一聊编译过程,我们写代码通常会用现成集成开发环境,比如vs2010等,写完后一键编译,就能获取我们想要执行文件,那么在这一键编译的过程中,发生了什么?编译个怎样的过程?要想了解这个...
  • 一个C语言程序编译过程

    千次阅读 2018-08-10 11:01:48
    一个再简单不过的C语言...执行gcc test.c,就使一个源文件变成了可执行文件,这个步骤我们很熟悉,但是从一个源文件(.c文件)到可执行程序到底经历了哪几步,每一步具体做了什么,这我想要总结一下: 一:...
  • 李洪强iOS开发之应用程序本质与简单执行过程 什么叫程序? 就是一段执行指令 程序两个状态: 保存状态(保存到硬盘上) 运行状态(由CPU执行) 代码可以执行吗? CPU(中央处理器-> 计算机计算和数据处理...
  • C语言编译过程

    千次阅读 2019-07-08 11:20:02
    从一个源文件(.c)到可执行程序到底经历了哪几步,我想大多数人都知道,到时到底每一步都做了什么,我估计也没多少人能够说得清清楚楚,明明白白。 其实总流程这样。 【第一步】编辑hello.c 1 #...
  • c语言规定在一个源程序中main函数位置可以任意;因为一个C程序总是从main函数开始执行,并在main函数中结束,不论main函数在整个过程位置如何。一个c程序有且仅有一个main函数,除main函数之外可以有若干...
  • 距离上一篇文章已经有一个月时间了 我居然花了一个月时间来研究计算机导论这个课题!!! ...但是身为有一名程序猿,你真知道什么叫 “ 程序 ” 、“ 代码 ” 和 “ 编译 ” 吗? 你能用...
  • 编译器把整个程序读进来,进行一系列变大变小转化优化的过程,产生可执行文件,然后编译器退出,由可执行文件来读取和输出数据。解释器就像启动了一个打印机,不把纸和数据送进来它就一直闲置开着。解释器启动后相当...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 768
精华内容 307
关键字:

c语言的执行过程是什么

c语言 订阅