源文件是否必须使用.c扩展名



如果一个文件没有保存为.c扩展名,会产生什么类型的错误?

我一直将源文件保存为.c,并且工作正常,但为什么.c是必需的?

但这是一个极其简短的回答。问题在于"必需"或"强制性"一词的上下文。

只要你问"X"编译器在"Y"平台上进行编译是否需要扩展名".c"&";,答案将取决于X和Y。

正如Girjesh-gcc在linux上所解释的那样;期望";源文件的文件扩展名为".c"。但是在编译过程中可以通过选项来避免这种情况。

gcc -x c x.l

将编译x.l文件,将其视为c源代码。[如果它确实是一个c源]

因此,对于*nix'.c'上的gcc来说,这只是一个命名约定。

查看雷米贝尔的回答

了解更多信息。

维基百科关于文件扩展名约定和限制的描述

文件扩展名可以被视为元数据的一种。它们是通常用于暗示有关数据存储方式的信息文件中。确切的定义,给出了决定的标准文件名的哪个部分是其扩展名,属于使用的特定文件系统;通常扩展名是子字符串在点字符的最后一次出现(如果有的话)之后(例如:txt是文件名readme.txt的扩展名,htmlmysite.index.html的扩展名)。在大型机的文件系统上MVS、VMS等系统,以及CP/M及衍生产品等PC系统在MS-DOS等系统中,扩展名是与filename。在Microsoft的DOS和Windows下,扩展如EXE,COM或BAT表示文件是可执行程序。

类似于UNIX的文件系统使用不同的模型,但没有隔离的扩展元数据点字符只是主体中的另一个字符filename,并且文件名可以有多个扩展名,通常表示嵌套转换,如files.tar.gz。此模型通常要求在命令中提供完整的文件名,其中元数据方法通常允许省略扩展。

.C文件中C源代码的内容只是普通文本,就像它可以在.txt、.log…
唯一真正的原因是我们可以快速识别哪些文件是C代码,哪些不是。

这是一种惯例,可以指示编译器。对于任何给定的输入文件,文件名后缀决定了要进行的编译类型:

man gcc:

file.c:必须进行预处理的c源代码
file.i:不应进行预处理的C源代码
file.h:C、C++、Objective-C或Objective-C++头文件要转换为预编译头文件。

如果你给出了无效的扩展,那么GCC会给你一个错误,即使是有效的代码:

@:~$ gedit x.l
@:~$ cat x.l
#include<stdio.h>
int main(){
printf("grijesh");
return 0;
}
@:~$ gcc x.l
x.l: file not recognized: File format not recognized
collect2: ld returned 1 exit status
@:~$ 

我没有尝试其他编译器。

文件扩展名对于编辑器应用主题也很有用

文件扩展名是计算机文件名的后缀(与基本文件名用点或空格分隔),用于指示其内容或用途的编码(文件格式)。

文件名扩展名可以被视为metadata的一种类型。它们通常用于暗示有关可能存储在文件中的数据的信息。

因此,它暗示编译器存储的数据类型(有时,数据是如何存储的)。

最新更新