⑴ C语言源程序文件、目标文件和可执行文件的扩展名是什么
C语言源程序文件扩展名: .c
目标文件扩展名: .obj
可执行文件扩展名: .exe
源程序:程序可以用高级语言或汇编语言编写,用高级语言或汇编语言编写的程序称为源程序。C语言源程序的扩展名为“.c”。源程序不能直接在计算机上执行,需要用“编译程序”将源程序编译为二进制形式的代码。
目标程序:源程序经过“编译程序”编译所得到的二进制代码称为目标程序。目标程序
的扩展名为“.obj”。
目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行程序。
可执行程序:目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序
称为可执行程序。可执行程序的扩展名为“.exe“。
(1)c文件扩展名过滤扩展阅读:
C语言创建程序的步骤:
编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。
编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。(该部分编译是指汇编器编译汇编语言或者编译器编译高级语言)
链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组成一个可执行的文件。在windows下扩展名为.exe,Unix下无扩展名。
执行:运行程序。
IT专家网——C语言编程程序编译全过程剖析
⑵ 如何在C语言中屏蔽转义字符的功能,析出文件路径文件名,扩展名。C:\my \so.net.(需要不用\\ 代替\)
获取方法,参考实例如下:'获取路径名各部分:如:c:\dir1001\aaa.txt'获取路径路径c:\dir1001\PublicFunctionGetFileName(FilePathFileNameAsString)AsString'获取文件名aaa.,JAsIntegeriLen(FilePathFileName)JInStrRev(FilePathFileName,"\")GetFileNameMid(FilePathFileName,J+1,i)EndFunction''获取路径路径c:\dir1001\PublicFunctionGetFilePath(FilePathFileNameAsString)AsString'获取路径路径c:\dir1001\(FilePathFileName,"\")GetFilePathMid(FilePathFileName,1,J)EndFunction'获取文件名但不包括扩展名(FilePathFileNameAsString)AsString'获取文件名但不包括扩展名,JAsInteger,kAsIntegeriLen(FilePathFileName)JInStrRev(FilePathFileName,"\")kInStrRev(FilePathFileName,".")Ifk0ThenGetFileNameNoExtMid(FilePathFileName,J+1,i-J)ElseGetFileNameNoExtMid(FilePathFileName,J+1,k-J-1)EndIfEndFunction'====='获取扩展名.(FilePathFileNameAsString)AsString'获取扩展名.,JAsIntegeriLen(FilePathFileName)JInStrRev(FilePathFileName,".")IfJ0ThenGetFileExtName".txt"ElseGetFileExtNameMid(FilePathFileName,J,i)EndIfEndFunction
⑶ c语言文件中常见的扩展名有哪些
你说的是VC工程的吧
DWS:工作区文件(一般打开这个)
dsp:工程文件
c:源文件
h:头文件
常用的就这些
⑷ 为什么C保存后的文件扩展名是".c"而不是".txt"~因为它明明是词本~
文件共有两类。一类是文本,另一类是二进制特制格式。文本文件可以用任意的文本编辑器打开,二进制文件必须使用专用程序。文件的扩展名只是人们为了区分文件而形成的一种约定而已,和文件本质无关。文件本质并不能从文件名本身区分,但是我们一般约定扩展名帮助区分。
你即使搞个扩展名*.doc的文本也可以,只是*.doc通常约定作为Word的二进制文件扩展名而已。(别说Word打开的文件显示为文本你就认为那是文本了,那是不一定的。当然,Word也是可以写文本的,但通常用来制作这款软件专用的二进制文件。)
⑸ 后缀为.c的文件是什么格式的使用什么软件来打开
后缀为.c文件是C语言源程序文件,可以通过记事本或者MicrosoftVisualC++6.0等打开。
一、源程序,是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件,通常由高级语言编写。
二、这种典型格式的目的是为了编译出计算机可执行的程序,将人类可读的程序代码文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,由各种编译器来完成。
三、编译器运行有以下四个过程:
头文件的预编译,预处理,编译器在编译源代码时,会先编译头文件,保证每个头文件只被编译一次,在预处理阶段,编译器将c文件中引用的头文件中的内容全部写到c文件中。
2.词法和语法分析(查错)
3.编译(汇编代码,.obj文件)转化为汇编码,这种文件称为目标文件。后缀为.obj。
4.链接(二进制机器码,.exe文件)将汇编代码转换为机器码,生成可执行文件。
(5)c文件扩展名过滤扩展阅读:
C语言后缀.h文件和.c文件作用
.h文件和.c文件作用
xx.h文件.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。x.c文件.c文件一般放的是变量、数组、函数的具体定义
xx.c文件.c文件一般放的是变量、数组、函数的具体定义
⑹ 在c语言中,怎样去掉文件后缀名
1、去掉文件后缀名可以通过修改文件名的方式实现。要调用操作系统提供的API函数,比如Windows上的MoveFile(),也可以直接调用cmd中已提供的重命名命令——rename。下面的示例代码,调用rename命令来重名命文件名。
2、例程:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain(intac,char*pav[])
{
if(ac!=3){
printf("程序名要重命名的文件路径新的文件名 ");
printf("示例:test.exe1.txt2.txt ");
return0;
}
if(access(pav[1],0)!=0){
printf("不存在该文件 ");
return0;
}
charszcmd[256]="cmd/crename";
strcat(szcmd,pav[1]);
strcat(szcmd,"");
strcat(szcmd,pav[2]);
system(szcmd);
return0;
}
⑺ 应急:C语言文件中常用的文件扩展名有哪些
.c 就是源文件 .h头文件
头文件是定义一些函数供我们调用的
如printf函数就定义在stdio.h中
用tc编译的话 常见错误提示有这些
Ambiguous symbol ''xxx'' 不明确的符号
Divide error 除数太小以至于结果太大
Array bounds missing 丢失数组界限符
Array size toolarge 数组尺寸太大
Call of non-function 调用未定义的函数
Call to function with no prototype 调用函数时没有函数的说明
Cannot modify a const object 不允许修改常量对象
Case outside of switch : 漏掉了case 语句
Case syntax error : Case 语法错误
Code has no effect 代码不可述不可能执行到
Compound statement missing{ 分程序漏掉"{"
Constant expression required 要求常量表达式
Could not find file ''xxx'' 找不到XXX文件
Declaration missing ; 说明缺少";"
Declaration syntax error 说明中出现语法错误
Default outside of switch Default 出现在switch语句之外
Do statement must have while : Do-while语句中缺少while部分
Expression syntax error 表达式语法错误
File name too long 文件名太长
Function call missing ) 函数调用缺少右括号
Fuction should return a value 函数必需返回一个值
Illegal character ''x'' 非法字符x
Irrecible expression tree 无法执行的表达式运算
Mismatched number of parameters in definition 定义中参数个数不匹配
No declaration for function ''xxx'' 没有函数xxx的说明
Not an allowed type 不允许使用的类型
Numeric constant too large 常数数值太大
Parameter ''xxx'' is never used 参数xxx没有用到
Pointer required on left side of -> : 符号->的左边必须是指针
Possible use of ''xxx'' before definition 在定义之前就使用了xxx(警告)
Possibly incorrect assignment 赋值可能不正确
Redeclaration of ''xxx'' 重复定义了xxx
Statement missing ; 语句后缺少";"
Type mismatch in parameter xxx 参数xxx类型不匹配
''xxx'' not an argument :xxx 不是参数
''xxx'' not part of structure : xxx不是结构体的一部分
xxx statement missing ( : xxx语句缺少左括号
xxx statement missing ) : xxx语句缺少右括号
xxx statement missing ; : xxx缺少分号
xxx'' declared but never used 说明了xxx但没有使用
xxx'' is assigned a value which is never used 给xxx赋了值但未用过
Zero length structure 结构体的长度为零
有些人称c语言为中级语言 就是说介于高级语言于低级语言之间
所以它具有高级语言的特性又有低级语言的特性
高级语言的特点简单来说就是人性化
而低级语言特点就是灵活
灵活就是能编的范围比较广
但是没有高级语言用起来那么方便
⑻ C语言文件扩展名是什么
源文件一般为 .c .h文件
动态库文件 .so
静态库文件 .a
在linux下几乎一切都是文件,扩展名只是用来人为区别类型
⑼ C语言中的源程序文件和目标文件的扩展名分别是
C语言源代码文件一般扩展名为.c,目标文件扩展名一般为.obj,生成的可执行文件扩展名一般为.exe。
不同平台的C源代码扩展名都为.c,但目标文件扩展名不同,例如:在Linux平台上,生成的可执行文件一般扩展为.out。
源文件:这是指由源程序和数据构成的文件。通常由终端或输入设备输入的源程序和数据所形成的文件都属于源文件。它通常是由 ASCII 码或汉字所组成的。
目标文件:这是指把源程序经过相应语言的编译程序编译过,但尚未经过链接程序链接的目标代码所构成的文件。它属于二进制文件。
可执行文件:这是指把编译后所产生的目标代码再经过链接程序链接后所形成的文件。
(9)c文件扩展名过滤扩展阅读:
源文件,目标文件,可执行文件的联系:
源文件就是用汇编语言或高级语言写出来的代码保存为文件,目标文件是指源文件经过编译程序产生的能被cpu直接识别二进制文件。将目标文件链接起来就成了可执行文件。
源代码与源文件:
源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。
计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。在大多数情况下,源代码等于源文件。
参考资料来源:网络-源文件
⑽ C语言文件的编译与执行的四个阶段并分别描述
采纳了加我不懂问我</b> 一 C编译过程概述 目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序.GCC不仅功能非常强大,结构也异常灵活.最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Mola-3和Ada等. Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。 使用GCC编译程序时,编译过程可以被细分为四个阶段:
◆ 预处理(Pre-Processing)
◆ 编译(Compiling)
◆ 汇编(Assembling)
◆ 链接(Linking) 二 编译过程中各种文件介绍 1.以扩展名区分文件类型.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。 2.LINUX目标文件描述 LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format 可执行和链接格式)。其中ELF是x86 Linux系统 下的一种常用目标文件(object file)格式,有三种主要类型: (1)适于连接的可重定位文件(relocatable file),可与其它目标文件一起创建可执行文件和共享目标文件。编译产生的.o文件就属于这类。
(2)适于执行的可执行文件(executable file),用于提供程序的进程映像,加载到内存执行。这就是编译、链接之后形成的最终文件。
(3)共享目标文件(shared object file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器又可将它与可执行文件和其它共享目标文件结合起来创建一个进程映像。这就是库文件,只指动态库文件。 详细了解请看本人收藏的《LINUX可执行文件分析》 三 编译过程详解 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下:
从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。 1. 编译过程 编译过程又可以分成两个阶段:编译和汇编。 1)编译 编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段: 第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中。这个在编译之前修改源文件的方式提供了很大的灵活性,以适应不同的计算机和操作系统环境的限制。一个环境需要的代码跟另一个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,再在预处理阶段修改代码,使之适应当前的环境。主要是以下几方面的处理: (1)宏定义指令, 如 #define a b
对于这种伪指令,预编译所要做的是将程序中的所有a用b替换,但作为字符串常量的 a则不被替换。还有 #undef,则将取消对某个宏的定义,使以后该串的出现不再被替换。 (2)条件编译指令, 如#ifdef,#ifndef,#else,#elif,#endif等。
这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉。
(3)头文件包含指令, 如#include "FileName"或者#include <FileName>等。 在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在 /usr/include目录下。在程序中#include它们要使用尖括号(< >)。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号("")。
(4)特殊符号,预编译程序可以识别一些特殊的符号。
例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
第二个阶段编译、优化阶段,经过预编译得到的输出文件中,只有常量;如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,}, +,-,*,\等等。
编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。
对于前一种优化,主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,等等。 后一种类型的优化同机器的硬件结构密切相关,最主要的是考虑是如何充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数。另外,如何根据机器硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,执行的效率比较高,也是一个重要的研究课题。
2)汇编
汇编实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段:代码段:该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。数据段:主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。 2. 链接过程 由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。
例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。
链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体。
根据开发人员指定的同库函数的链接方式的不同,链接处理可分为两种: (1)静态链接 在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。 (2)动态链接
在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。
对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。四 编译过程实例描述 linux中使用的gcc编译器把上述的几个过程集成,一个命令就能完成编译的整个过程。为了详细说明每个步骤,下面我们将分部执行。下图是gcc代理的编译过程
例程: 在linux下创建文件hello.c,内容如下,
#include <stdio.h>
int main(void)
{
printf ("Hello,everybody!\n");
return 0;
} ◆ 预处理(Pre-Processing)
使用-E参数可以让GCC在预处理结束后停止编译过程,对应的命令是cpp,
# gcc -E hello.c -o hello.i 用编辑器打开hello.i,可以看到stdio.h文件被展开到了hello.i中。 ◆ 编译(Compiling)
使用-S参数将hello.i编译为汇编程序,使用的命令是cc -S,
#gcc –S hello.i –o hello.s 用编辑器打开hello.s,显然已经变成了汇编代码。 ◆ 汇编(Assembling)
使用-c参数将hello.s编译为目标文件,对应的命令是as,
#gcc –c hello.s –o hello.o 可以利用工具readelf或者objmp读出hello.o的信息。 ◆ 链接(Linking) 产生可执行文件,利用命令ld
# gcc hello.o -o hello
利用readelf,可以看到hello.o和hello文件的区别。