当前位置:首页 » 编程语言 » 编译c语言程序的三个过程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

编译c语言程序的三个过程

发布时间: 2022-04-04 11:06:02

c语言文件的编译与执行的四个阶段并分别描述

开发C程序有四个步骤:编辑、编译、连接和运行。

任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。

1、预处理:导入源程序并保存(C文件)。

2、编译:将源程序转换为目标文件(Obj文件)。

3、链接:将目标文件生成为可执行文件(EXE文件)。

4、运行:执行,获取运行结果的EXE文件。

(1)编译c语言程序的三个过程扩展阅读:

将C语言代码分为程序的几个阶段:

1、首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。文件不包含任何宏定义,因为所有宏都已展开,并且包含的文件已插入。我归档。

2、编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分,也是最复杂的部分之一。

3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可以运行的可执行程序。也就是说,您需要链接大量的文件才能获得“a.out”,即最终的可执行文件。

4、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。

② C语言源程序的编译过程包括哪三个阶段

编译:将源程序转换为扩展名为.obj的二进制代码
连接:将obj文件进行连接,加入库函数等生成可执行文件
运行:执行可执行文件,有错返回修改,无错结束

③ C语言编译执行的全过程是怎样的

预处理阶断:这个就是那些#include啥的。
编译阶断:把C语言的代码转成汇编语言代码,比如 int a = 2; 它会生成mov a, 2;
汇编阶断:把汇编代码转换成机器码,比如把mov a , 2 ; 转成 cd07 (mov指令的机器码中的一种机器码)
链接阶断:制作成一个可执行文件,比如windows是PE的可执行文件,linux是elf的可执行文件,要制作成可以运行的程序。

④ 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语言程序运行过程

  1. 第一题答案:

    60.5

    70.5

    运行过程:首先struct xscj xs[]={{1,60,61},{2,70,71}};这条语句是对结构体数组xs赋初值,{1,60,61}分别赋值给xs[0].n=1, xs[0].cj1=60, xs[0].cj2=61;xs[0].cj3未赋值。同理,{2,70,71}分别赋值:xs[1].n=2, xs[1].cj1=70, xs[1].cj2=71;xs[1].cj3未赋值.

    其次,

    for(i=0;i<2;i++){

xs[i].cj3=(xs[i].cj1+xs[i].cj2)/2;

printf("%5.1f ",xs[i].cj3);

}

这条语句是分别对xs[1],xs[2]的cj3字段赋值,赋值为(cj1+cj2)/2的值。输出语句 printf("%5.1f ",xs[i].cj3);限定了输出宽度和小数点位数,故输出60.5 和 70.5.

2.第二题填空:st.name @st.age

首先明白scanf的格式:

scanf("格式化字符串",变量地址表);

“变量地址表”是接受输入数据的变量的地址。第一个输入格式是%s,接收字符串,字符串名字即为首地址,所以直接st.name就可以了;第二个格式是%d,接收整型数据,所以必须取地址,使用取地址符号&,所以第二空答案就是&st.age.

⑥ C语言程序的执行过程有哪几个步骤

先是写源码一般是点c的或者点SQC在或者是点EC的文件
然后就是编译
编译之前首先把不是点c的文件生成点c的文件
然后就是编译
先是预编译把一些inclde里边的文件宏定义之类的东西展开(相当与把所有的文件搞成一个)
然后就是编译把c文件生成一个点o的二进制文件
如果有需要的话把点o的文件生成一个点a的库文件
再就是连接把所有的点o和点a文件生成可执行程序
接下来就是执行这个可执行文件了

⑦ C语言程序主要的实现过程是什么

主要是学c语言的基本词法,基本语句分类,基本构成,开发环境,基本数据类型,运算符,表达式,结构化程序3种基本结构,数组,
指针,函数,文件
如果要编程还要学数据结构

⑧ c语言程序编译过程包括哪四个

C语言编译过程分成四个步骤: 
1,由.c文件到.i文件,这个过程叫预处理 
2,由.i文件到.s文件,这个过程叫编译 
3,由.s文件到.o文件,这个过程叫汇编 
4,由.o文件到可执行文件,这个过程叫链接
用gcc查看预处理过程(假设源文件叫hello.c) 
gcc -o hello.i hello.c -E 
然后用 vi hello.i 即可查看生成的预处理文件
按ESC 输入:$ 跳到预处理文件 可看到hello.c源码
宏的本质:预处理阶段的单纯的字符串替换
预处理阶段,不考虑C语法

⑨ C语言程序开发的四个步骤是什么

1 写代码。

2 编译。

3 链接。

4 运行。

⑩ 求大一5段简单的C语言程序(语言程序编译过程)

//写的比较乱,将就着看吧
#include<stdio.h>
#include<string.h>

intfunction1(char*str,charfind);

intfunction2(inta,intb,intc);

intfunction3(floata,floatb,floatc);

intfunction4();

intfunction5();
intmain()
{
inta=3,b=10,c=5;
printf("function1 ");
char*string="helloworld";
printf("have%d%c ",function1(string,'l'),'l');
printf("function2 ");
printf("themaxis:%d ",function2(a,b,c));
printf("function3 ");
floato=10.4,p=5.7,q=6.3;
function3(o,p,q);

function4();

function5();
return0;
}
intfunction1(char*str,charfind)
{
inti=0,j=0;
for(i=0;i<strlen(str);i++)
{
if(str[i]==find)
{
j++;
}
}
returnj;
}

intfunction2(inta,intb,intc)
{
return(a)>(b)?((a)>(c)?(a):(b)):((b)>(c)?(b):(c));
}

intfunction3(floata,floatb,floatc)
{
floatt;
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("a: b: c: ");
printf("%f %f %f ",a,b,c);
}

intfunction4()
{
intm;
char*arr[8]={"1","mon","tue","wed","thu","fri","sat","sun"};
printf("function4 ");
printf("pleaseinputanumber ");
scanf("%d",&m);

if(m<0||m>7)
{
printf("inputerror ");
return-1;
}
else
{
printf("thisnumberis%s ",arr[m+1]);
return0;
}
}

intfunction5()
{
floata,b;
printf("addfunction ");
printf("pleaseinputtwonumber ");
scanf("%f%f",&a,&b);
printf("%.3f+%.3f=%.3f",a,b,a+b);
}