A. c语言源程序文件经过编译后生成文件的扩展名
c语言源程序文件经过编译后生成文件的扩展名.obj。
当C语言源代码被编译后,通常会生成一个“.o”(object file)文件。这个文件包含了编译器所产生的机器代码,但是它还没有被链接到其他模块或库中。相应地,在不同的操作系统上可能会有不同的后缀名和二进制格式。例如,Windows上的Visual C++编译器使用“.obj”作为目标文件的扩展名。
在大多数情况下,C语言经过编译后生成的文件后缀名是“.o”,也可以是“.obj”或其他操作系统特定的格式。这些文件包含了编译器所产生的机器代码,并且通常需要链接到一起才能生成可执行文件。
C语言简介
C语言是一门面向过程的计算机编程语言,与C++、C#、Java面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%—20%,因此C语言可以编写系统软件。
当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写,是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显着。
B. C语言执行过程生成的三种文件和扩展名
C语言开发过程中会生成三种类型的文件,它们分别具有不同的扩展名:
首先是源代码文件,通常使用".c"作为扩展名;其次是目标代码文件,其扩展名为".obj";最后是可执行文件,其扩展名为".exe"。
源代码文件经过编译(compile)处理后会生成目标代码文件,目标代码文件进一步经过链接(link)处理后会生成可执行文件。使用微软的Visual C++ 6.0开发工具时,在状态输出窗口中,你可以看到编译和链接的进度,比如会显示"compiling...",然后是"linking..."。
编译过程负责将源代码文件中的C语言代码转换成汇编代码,生成目标代码文件。这个过程中,编译器会检查语法错误,优化代码,并生成中间形式的代码。
链接过程则将多个目标代码文件合并为一个完整的可执行文件。在链接过程中,链接器会解析各个目标文件中的符号引用,将其合并成一个程序,同时也会进行静态链接库的处理。
可执行文件是最终的程序文件,可以直接运行。它包含了程序运行所需的全部信息,包括代码、数据以及动态链接库的引用等。
在使用开发工具进行C语言程序开发时,理解这些文件类型及其生成过程对于提高开发效率非常重要。熟悉这些过程有助于开发者更好地利用工具,解决编译和链接过程中出现的问题。
C. gcc缂栬疟鍣ㄧ敓鎴愮殑鐩镙囨枃浠舵槸浠涔堬纻
1銆侀勫勭悊
鍦ㄨ繖涓阒舵碉纴婧愮爜涓镄勬墍链夐勫勭悊璇鍙ュ缑鍒板勭悊锛屼緥濡傦细#include璇鍙ユ墍鍖呭惈镄勬枃浠跺唴瀹规浛鎹㈡帀璇鍙ユ湰韬锛屾墍链夊凡瀹氢箟镄勫畯琚灞曞紑銆
镙规嵁#ifdef锛#if绛夎鍙ョ殑𨱒′欢鏄钖︽垚绔嫔彇鑸岖浉搴旂殑閮ㄥ垎锛岄勫勭悊涔嫔悗婧愮爜涓涓嶅啀鍖呭惈浠讳綍棰勫勭悊璇鍙ャ
GCC棰勫勭悊阒舵靛彲浠ョ敓鎴.i镄勬枃浠讹纴阃氲繃阃夐”-E鍙浠ヤ娇缂栬疟鍣ㄥ湪棰勫勭悊缁撴潫镞跺氨锅沧㈢紪璇戙备緥濡傦细gcc -E -o hello.i hello.c
2銆佺紪璇
杩欎竴阒舵碉纴缂栬疟鍣ㄥ规簮镰佽繘琛岃瘝娉曞垎鏋愩佽娉曞垎鏋愩佷紭鍖栫瓑镎崭綔锛屾渶钖庣敓鎴愭眹缂栦唬镰併傝繖鏄鏁翠釜杩囩▼涓链閲嶈佺殑涓姝ワ纴锲犳や篃甯告妸鏁翠釜杩囩▼绉颁负缂栬疟銆
鍙浠ラ氲繃阃夐”-S浣縂CC鍦ㄨ繘琛屽畬缂栬疟钖庡仠姝锛岀敓鎴.s镄勬眹缂栫▼搴忋备緥濡傦细gcc -S -o hello.s hello.c
3銆佹眹缂
杩欎竴阒舵典娇鐢ㄦ眹缂栧櫒瀵规眹缂栦唬镰佽繘琛屽勭悊锛岀敓鎴愭満鍣ㄨ瑷浠g爜锛屼缭瀛桦湪钖庣紑涓.o镄勭洰镙囨枃浠朵腑銆
褰撶▼搴忕敱澶氢釜浠g爜鏂囦欢鏋勬垚镞讹纴姣忎釜鏂囦欢閮借佸厛瀹屾垚姹囩紪宸ヤ綔锛岀敓鎴.o鐩镙囨枃浠跺悗锛屾墠鑳借繘鍏ヤ笅涓姝ョ殑阈炬帴宸ヤ綔銆
鐩镙囨枃浠跺凡缁忔槸链缁堢▼搴忕殑镆愪竴閮ㄥ垎浜嗭纴鍙鏄鍦ㄩ摼鎺ヤ箣鍓嶈缮涓嶈兘镓ц屻傚彲浠ラ氲繃-c阃夐”鐢熸垚鐩镙囨枃浠讹细gcc -c -o hello.o hello.c
4銆侀摼鎺
缁忚繃姹囩紪浠ュ悗镄勬満鍣ㄤ唬镰佽缮涓嶈兘鐩存帴杩愯屻备负浜嗕娇镎崭綔绯荤粺鑳藉熸g‘锷犺浇鍙镓ц屾枃浠讹纴鏂囦欢涓蹇呴’鍖呭惈锲哄畾镙煎纺镄勪俊鎭澶达纴杩桦繀椤讳笌绯荤粺鎻愪緵镄勫惎锷ㄤ唬镰侀摼鎺ヨ捣𨱒ユ墠鑳芥e父杩愯岋纴杩欎簺宸ヤ綔閮芥槸鐢遍摼鎺ュ櫒𨱒ュ畬鎴愮殑銆俫cc -o hello hello.c
5銆佽繍琛岋细镓ц.EXE鏂囦欢锛屽缑鍒拌繍琛岀粨鏋溿
D. C语言源程序文件经过编译连接之后生成一个后缀为_____的文件。
如果只生成一个文件,那么这个题目答案是B。编译(compile)后生成目标文件,后缀:.obj。也就是机器码。
然后链接器(Linker) 连接生成可执行文件,后缀:.exe。最后运行命令(go),直接运行.exe文件。
(4)c源程序通过编译得到的目标文件扩展阅读:
简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。
一个现代编译器的主要工作流程:源代码(source code) →预处理器(preprocessor) →编译器(compiler) →目标代码(object code) →链接器(Linker) → 可执行程序(executables)
高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。
编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。
源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言。
而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。
最后运行的时候通过通用语言运行库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。
E. c语言编译生成的.obj文件解释下
c语言编译生成的.obj文件是一种文本文件,程序编译时生成的中间代码文件目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的相对地址,而可执行文件是绝对地址。
obj文件基本结构:OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。
OBJ文件由一行行文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。
(5)c源程序通过编译得到的目标文件扩展阅读:
C编译的整个过程很复杂,大致可以分为以下阶段:
1、预处理阶段
在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等,总之这步主要完成一些替换工作,输出是同源文件含义相同但内容不同的文件。
2、编译、优化阶段
编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。优化包括对中间代码的优化,如删除公共表达式,循环优化等;和对目标代码的生成进行的优化,如如何充分利用机器的寄存器存放有关变量的值,以减少内存访问次数。
3、汇编阶段
将汇编语言翻译成机器指令。