⑴ c语言源程序到运行程序经过哪几个步骤
1、预处理
在这一阶段,源码中的所有预处理语句得到处理,例如:#include语句所包含的文件内容替换掉语句本身,所有已定义的宏被展开。
根据#ifdef,#if等语句的条件是否成立取舍相应的部分,预处理之后源码中不再包含任何预处理语句。
GCC预处理阶段可以生成.i的文件,通过选项-E可以使编译器在预处理结束时就停止编译。例如:gcc -E -o hello.i hello.c
2、编译
这一阶段,编译器对源码进行词法分析、语法分析、优化等操作,最后生成汇编代码。这是整个过程中最重要的一步,因此也常把整个过程称为编译。
可以通过选项-S使GCC在进行完编译后停止,生成.s的汇编程序。例如:gcc -S -o hello.s hello.c
3、汇编
这一阶段使用汇编器对汇编代码进行处理,生成机器语言代码,保存在后缀为.o的目标文件中。
当程序由多个代码文件构成时,每个文件都要先完成汇编工作,生成.o目标文件后,才能进入下一步的链接工作。
目标文件已经是最终程序的某一部分了,只是在链接之前还不能执行。可以通过-c选项生成目标文件:gcc -c -o hello.o hello.c
4、链接
经过汇编以后的机器代码还不能直接运行。为了使操作系统能够正确加载可执行文件,文件中必须包含固定格式的信息头,还必须与系统提供的启动代码链接起来才能正常运行,这些工作都是由链接器来完成的。gcc -o hello hello.c
5、运行:执行.EXE文件,得到运行结果。
⑵ C语言语句执行顺序(初学者)
先执行do { } while()这个语句中括号部分,执行完后判断while语句是否成立,成立则继续执行中括号中语句,如此循环。中括号中部分,while((c=str[i])==‘’)i++;是先执行c=str[i]这个赋值语句,然后判断c的值是否等于' ',等于的话就执行i++,然后继续执行c=str[i],如此循环。while((c=str[i])!=''&&c!='\0')i++;是先执行赋值语句c=str[i],然后判断c是否等于' ',等于的话再判断c是否等于'\0',两个条件都成立的话就执行i++,如此循环。
⑶ C语言,函数执行先后顺序
其实是printf("等于");
先执行的,然后再执行的scanf("%d",&c);
只不过scanf的时候并不是从屏幕上scanf的,而是从缓冲区scanf的
你的5其实在printf之前先进入了缓冲区,然后再printf等于,然后再从缓冲区scanf那个5
如果要想得到你那个效果的输入输出,可以试试下面的代码
#include<stdio.h>
voidmain()
{
intb,c,f;
chara;
scanf("%d%c",&b,&a);
printf("%d%c",b,a);
if(a=='-')
{
printf("等于");
scanf("%d",&c);
f=b-c;
printf("%d%d",c,f);
}
}
⑷ 关于C语言程序的执行顺序
1.
最开始a=0.000000;
2.
C语言从main()函数开始执行,如果在main()函数中不调用test(),那么test()就不执行。
3.
假设调用了test()函数,那么要等timer函数执行完之后才开始执行a
=
k
+
i
。
4.
假设调用了timer()函数,只是要循环100次,并不是100个时钟周期。
⑸ 一个c语言的执行是从什么开始的
c程序的执行总是从本程序的main函数开始执行的。
一个C语言的执行是从本程序的main函数开始,到main函数结束,但需要注意的是,也是有特殊情况的,若是代码中出现了exit函数,则直接结束程序。
c程序介绍
c程序C语言是世界上最流行、使用最广泛的面向过程的高级程序设计语言。 C语言对则带操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很孙迟芦强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画是它数值计算的高级语言。
不仅如此,C语言也是在计算机中比较实用的程序设计工具,掌握了c语言之后,对用户在日后学习JAVA、C++、VB等都是有好处的,可以打下良好的基础,主要是因为这些语言大部分都是由C语言扩充或衍生而来的。
C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不旦兄需要任何运行环境支持便能运行的高效率程序设计语言。
⑹ C语言程序的运行顺序
for多重循环的执行顺序是先执行内部循环,再执行外部循环
通过对代码进行等价转换,按照上述原理即可知道代码的执行顺序
对于上面代码:
for(i=0;i<8;i++)
for(j=0;j<10;j++)
scanf("%d,%d",&i,&j);
它等价于下面
for(i=0;i<8;i++){
for(j=0;j<10;j++){
scanf("%d,%d",&i,&j);
}
}
从上面可以看出,每执行完一次j循环,i的值才增加1
但是注意,该代码有一个陷阱:scanf函数会改变i和j的值
实际执行顺序会受用户输入的i、j值的不同而不同
对于下面的代码
for(i=0;i<8;)
min_m(i++)=i
for(j=0;j<8;j++)
它等价于下面的代码:
for(i=0;i<8;){
min_m(i++)=i
}
for(j=0;j<8;j++){}
会先执行min_m函数8次 然后再执行j循环
注意,该代码有一个问题,就是min_m函数的返回值必须是一个左值。
这意味着某些变量的值发生了更改,可能会影响到循环。