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

时间:2014-01-04 10:17:52

标签: c compilation file-extension

如果文件未保存为.c扩展名,会生成哪种类型的错误?

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

它是常规,可以是编译器的指示,对于任何给定的输入文件,文件名后缀确定完成了哪种编译:

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
@:~$ 

我没有尝试其他编译器。

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

答案 2 :(得分:1)

NO

但这是一个残酷的简短回答。问题是“必要”或“强制”一词的背景。

一旦你问“'Y'平台上的'X'编译器编译需要”扩展名'.c'吗?答案将取决于X和Y.

正如Girjesh解释的那样,linux上的gcc“期望”源文件的文件扩展名为“.c”。但是在编译期间可以通过选项来避免它。

gcc -x c x.l

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

因此对于gcc on * nix'.c'只是一个命名约定。

Check remyabel's answer

for more info

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

  

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

     

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

答案 3 :(得分:0)

文件扩展名是后缀(通过点或空格与基本文件名分隔)到应用于​​指示其内容或用法的编码(文件格式)的计算机文件的名称。

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

因此,它意味着编译器关于存储的数据类型(有时,数据是如何存储的)。