c语言编译成目标语言
Ⅰ c编译程序是什么
c编译程序是将c语言程序编译成目标代码程序的程序,即正确答案应该选择D。
1、c语言是目前世界上最流行、使用最广泛的面向过程的高级程序设计语言。 c语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用c语言明显优于其它高级语言,许多大型应用软件都是用c语言编写的。
2、编译就是利用编译程序从源语言编写的源程序产生目标程序的过程,其中的五个阶段分别是词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
(1)c语言编译成目标语言扩展阅读
c编译程序的语言特点
对于c编译程序来说,其语言的特点如下:
1、c语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护,而且表现能力和处理能力极强。
2、c语言具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
3、由于c语言实现了对硬件的编程操作,因此集高级语言和低级语言的功能于一体。它既可用于系统软件的开发,也适合于应用软件的开发。
4、此外,c语言还具有效率高、可移植性强等特点。因此它广泛地移植到了各类各型计算机上,从而形成了多种版本。
Ⅱ 怎么把C语言转化为相应对机器语言
以GCC编译器为例,可以分为四步。
第一步是预处理,包括语法检查等工作。
gcc -P abc.c
第二步由源程序生产汇编语言代码。
gcc -S abc.c
会生成abc.s文件,这个文件里就是汇编代码。
第三步编译器生成目标代码,一个源文件生成一个目标代码。
gcc -c abc.c
会生成abc.o
第四步连接器从目标代码生成可执行文件。
gcc abc.o
目标代码包括机器码和符号表(函数及变量名)。连接器的主要作用是通过符号表在库文件和其他模块中找到在目标代码中引入或未定义的符号(函数及变量名),将几个目标代码合成可执行文件。
Ⅲ C编译程序是
C
C编译程序就是将C语言程序编译成目标机器上的程序的。
Ⅳ c语言源程序通常由什么将其转换为目标程序
C语言程序不能直接运行,通常用编译程序将其编译为目标程序。再连接上需要的库程序,得到可运行的二进制程序。
Ⅳ 编译器用c语言作为目标语言有什么好处
可移植性强
Ⅵ C语言编译原理
编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。
1、预处理阶段:
主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)
2、汇编阶段:
插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。
3、编译阶段:
将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。
4、链接阶段:
在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。
Ⅶ 求将C语言源文件转换成目标文件的源代码,万分感谢!
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct pnode //个人记录结点类型
{
char name[8]; //姓名
char tel[16]; //电话号码
char addr[30]; //住址
}personnode;
char filename[20]; //存储通讯录名称数组
FILE *fp;
void creat() //初始输入记录
{
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n请输入通讯录名:");
scanf("%s",filename);
printf("---------------------------------------------\n");
if((fp=fopen(filename,"w"))==NULL) //打开文件
{
printf("\n没有输入通讯录名,不能建立通讯录!");
exit(1);
}
fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","住址");
printf("\n请输入姓名,电话号码及住址(以空格隔开,以@结束)\n");
printf("---------------------------------------------\n");
scanf("%s",person->name);
while(strcmp(person->name,"@"))
{
scanf("%s%s",person->tel,person->addr);
fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
scanf("%s",person->name);
}
fclose(fp);
}
void output() //输出通讯录
{
personnode*person;
person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打开通讯录!");
exit(1);
}
printf("\n*********************************************\n");
printf("%24s\n","通讯录");
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
}
fclose(fp);
printf("*********************************************\n\n");
}
void append() //增加记录
{
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打开通讯录!");
exit(1);
}
printf("\n请输入要添加的姓名,电话号码及住址\n");
scanf("%s%s%s",person->name,person->tel,person->addr);
fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
fclose(fp);
}
void search() //查找记录
{
int k=0;
char namekey[8];
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n请输入需要查找的姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打开通讯录!");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
if(!strcmp(namekey,person->name))
{
printf("\n\n已查到,记录为:");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
k=1;
}
}
if(!k) printf("\n\n对不起,通讯录中没有此人的记录。\n");
fclose(fp);
}
void dele() //删除记录
{
int k=0;
char m;
long offset1;
char namekey[8];
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n请输入要删除记录的姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯录!");
exit(1);
}
while(!feof(fp))
{
offset1=ftell(fp); //P302(C语言),ftell(fp)的值是fp所指文件中位置指针的当前指向
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
if(!strcmp(namekey,person->name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为:");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
printf("\n确实要删除?y/n\n");
scanf("%s",&m);
if(m='y')
{
fseek(fp,offset1,SEEK_SET); //P302,fseek()函数的作用是使位置指针移动到所需的位置,(SEEK_SET即0,头文件)
fprintf(fp,"%-14s%-24s%-48s\n"," "," "," ");
printf("已经删除!\n");
}
}
else
{
printf("\n对不起,通讯录中没有此人的记录。\n");
}
fclose(fp);
}
main()
{
int m,flag=1;
creat();
while(flag)
{
printf("---------------------------------------------\n");
printf("\t\t1---添加\n");
printf("\t\t2---查找\n");
printf("\t\t3---删除\n");
printf("\t\t4---输出\n");
printf("\t\t5---退出\n");
printf("---------------------------------------------\n");
printf("\t请选择(1-6)\n");
scanf("%d",&m);
switch(m)
{
case 1: append();break;
case 2: search();break;
case 3: dele();break;
case 4: output();break;
case 5: exit(0);
}
}
return 0;
}
这是我以前做的一个实验,里面就是把数据输出到目标文件的,没有什么一段代码直接丢到里面去就直接能做好的,认真看下吧,尤其注意person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"a"))==NULL);这些语句
Ⅷ 我们最终利用C语言编成目标程序,而计算机能直接执行目标程序吗
不能,需要经过编译和链接两个步骤,将.c后缀的文件转成.EXE后缀的文件,才能运行
Ⅸ C语言采用解释方式将源程序转换为二进制的目标代码吗
不是,C语言采用编译方式将源程序转换为二进制的目标代码。使用C语言编译器来完成。
所谓C语言编译器,就是把编程得到的文件,比如.c,.h的文件,进行读取,并对内容进行分析,按照C语言的规则,将其转换成cpu可以执行的二进制文件。其本质在于对文件的读入,分析,及处理。
C语言编写的程序代码称为源程序,对于计算机本身来说,它并不能直接识别由高级语言编写的程序。C语言程序经C语言编译程序编译后,生成后缀为.obj的二进制文件(称为目标文件)。
此.obj文件必须与系统提供的各种库函数连接起来生成一个后缀为.exe的可执行文件才可以执行。C语言的可执行文件由一系列机器指令构成的。
(9)c语言编译成目标语言扩展阅读
解释执行和编译执行是计算机语言的执行方式。解释执行由解释器现场解释执行,不生成目标程序。如BASIC便是解释执行,一般解释执行效率较低,低于编译执行。
编译执行由编译程序将目标代码一次性编译成目标程序,再由机器运行目标程序。如:PASCAL,C,C++,delphi等语言。效率高于解释执行。
Ⅹ C语言中编译 生成 调试 测试 运行各是什么意思有什么区别
C语言中编译 生成 调试 测试 运行的区别如下:
区别一:
从编译方面来看:
编译依赖于编译器,英文是compile, vc中这一过程是将源代码转换成目标文件,如:obj文件,rc文件等。
区别二:
从生成方面来看:
生成指的是连接的过程,英文是build,依赖于链接器。vc中在这一阶段将所有的目标文件和所有需要用到的组件组合成一个整体,例如需要生成的是windows系统下的PE可执行文件,链接器会依照特定格式将目标文件组合,最后生成PE格式的,exe或dll文件。
区别三:
从调试方面来看:
调试是所有或部分代码编写完成后,让程序在调试器中运行,用这种手段对程序进行分析,找出并修正潜在问题。
区别四:
从运行方面来看:
运行就是让程序在系统中运行。
(10)c语言编译成目标语言扩展阅读:
C语言的介绍:
C语言是目前流行的通用程序设计语言,是计算机专业人员和计算机爱好者开发软件的首选开发工具。C语言源程序必须经过某种编译工具翻译成为目标机器语言程序才能够在计算机上执行。
然而随着程序编写规模的扩大,顺利编写出正确的程序绝非一件容易的事情,早期的许多编译工具仅仅提供翻译功能,已满足不了应用的要求,编程人员需要-种功能全面并高度集成的编译环境。
程序是一段具有一定功能的代码,编写程序的目的是解决问题。当程序人员写完程序后,其实并不起作用,只有当编写的程序经过一系列的处理后,能够解决问题时。
序才成为真正的程序,这一系列的处理过程,-般就是编辑、编译、连接、调试与运行等。目前最成熟的C语言集成环境主要有Turbo C2.0和Turbo C 3.0( 简称TC30)或Borland C++3.1( 简称BC31)以及Visual C++ 6.0。