① c语言里面的编译和链接是怎么回事
C/C++语言的完整编译过程是
一、预编译
处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。
二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。
三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。
② C语言编译原理是什么
编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。
1、预处理阶段:
主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)
2、汇编阶段:
插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。
3、编译阶段:
将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。
4、链接阶段:
在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。
③ c语言编的程序如何编译....在哪里编译,编译了是不是直接就可以执行了
1用C语言编的是源程序,要将它编译成可执行的.EXE,在主菜单子窗口中选中一个叫做COMPILE的东东(意思是编译),在按“MAKE
EXE
FILE”然后回车,在找到相应位置运行便可。
2用TC打开编写好的源程序在窗口中选中RUN(运行)。。
④ 为什么自己编译的c语言程序会一闪而过
这是因为电脑运行得很快,
而你编写的程序里面肯定没有让电脑可以停歇的语句,电脑执行完程序后就自动关闭,只有想办法让它停下等咱们才能看清楚
所以建议在程序的最后加一句getchar();这时,你要加入头文件#include<conio.h>。
因为这个头文件是键盘和屏幕输入输出的控制头文件。当然也有别的方法,就等你了解其原理时就知道该怎样了
⑤ 单片机c语言中的预编译是怎么回事啊
加头文件就是加别人给你写好的函数还有变量定义什么的,你初学单片机应该就用到#include<reg51.h>或者#include<reg52.h>这个就看你用的单片机芯片是什么型号的了,51的就有用前面那个,52用后面那个。
初学我建议你看一下郭天祥老师的十天学会单片机,讲的通俗易懂,而且是用c写的。
祝你成功…………
⑥ 用C语言编的程序,要生成可执行文件的时候,要编译、链接,编译是什么意思啊链接是什么意思编译和链接
编译就是把C代码转换成CPU可执行的机器指令,每个.c文件生成一个.obj文件。
链接就是把生成的(多个)
.obj
文件及用到的库文件(.lib)一起组合生成可执行文件(.exe)。
⑦ 为什么我每次编译C语言时,都会发生这样的错误
这个可能是你编程用的软件没有装好,一般是路径安装问题。你用的是不是vc++6.0?是的话,下面有些解决方法你可以试试。
关于vc++6.0软件编程时出现“Error spawning cl.exe”“ cannot open file "Debug/sad.exe"(其中sad是文件名)”和“计算机丢失mspdb60.ll”等类似问题时;
主要可能存在以下问题1.以前安装过vc++6.0,但是卸载不彻底,或者重装系统后,原来安装软件不能正常使用。解决方法:卸载原软件。
2,vc++6.0与windowxpsp3兼容,在window7下计算机会提示软件不兼容,这时不用修改成兼容模式,否者就不能使用了,直接安装就可以了,不用考虑兼容性问题,
还用如果是从网上下载的软件,安装时的注册码一般输入111-111111就行。另外,下载的破解版软件可能被杀毒软件截获,安装前最好先关闭杀毒软件,然后按提示进行安装。
3.在排除前两个问题的前提下,出现上述问题时,很可能的问题是软件中的设置出现错误。可以按下述方法进行调试即可:
打开vc界面 点击VC“TOOLS(工具)”—>“Option(选择)” —>“Directories(目录)”重新设置“Excutable Fils、Include Files、 Library Files、Source Files”
的路径。很多情况可能就一个盘符的不同 (例如你的VC装在C,但是这些路径全部在D),改过来就OK了如果你装在其他盘里,则仿照其路径变通就行(我就是装在D盘)。
关键是microsoft visual studio\ 后面的东西要相同。 如果你是按照初始路径安装vc6.0的,路径应为:
executatble files:
C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin
C:\Program Files\Microsoft Visual Studio\VC98\BIN
C:\Program Files\Microsoft Visual Studio\Common\TOOLS
C:\Program Files\Microsoft Visual Studio\Common\TOOLS\WINNT
include files:
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
library files:
C:\Program Files\Microsoft Visual Studio\VC98\LIB
C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB
source files:
C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC
更改完成后,关闭软件,重新打开,再进行编程。
4,如果按第三步操作后,编程时仍然提示错误,就在建立工程时,将存储路径改为你自己建立的文件夹(随便在那个盘建一个都行,只要自己能找到就行),
以避免编译时文件不能打开的问题。
5,经过以上四步调试,一般情况下就可以使用了,如果还不能使用的话,可以尝试一下三种方法。
一,卸掉现有版本,更换版本重新安装,然后再按以上步骤进行调试。
二,直接将别人计算机中安装好的软件从安装盘中复制的自己的电脑上,(这样做有时也要按第三步和第四步进行调整,),找出文件中的图标即可运行。
三,最后一个办法,重装系统,系统重装后,一定要先装vc++再装补丁,不然的话还可能错误。
⑧ C语言程序对,但是编译不出来是怎么回事
编译出来只说明程序没有语法错误,不说明没亮册有逻辑错误,有错误一般会有屏幕输出,此其一敬知宏。第二,可以在程序中设定一些输出语句或断点观察。第三如果程序不输入、输出内容,程序执行是当然看不见东西(不直观)。第三如果程序一值运行无法退出,说明存在“死循环”。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低猛御级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
⑨ c语言里面的编译和链接是怎么回事啊
C/C++语言的完整编译过程是
一、预编译
处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。
二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。
三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。
⑩ 自己写编译器怎么写,我想为中国程序员做个编译C语言的编译器。
1、第一个C语言编译器应该是用汇编写的,但是第一个成熟的旦好行C语言编译器应该是由汇编和C语言共同写的。
2、编译原理讲到了“自举编译器”。大意就是先用底层语言(模哗应该是汇编)写一个能运行,但效率极低的C语言编译器(底层语言不好优化),有了C语言的编译器以后,就可以用C语言好好写一个编译器了,用之前那个运行没问题,但效率低得编译器编译一袜雹下,就得到了可以使用的编译器了。