如果文件未保存为.c
扩展名,会生成哪种类型的错误?
我一直将源文件保存为.c
并且工作正常,但为什么需要.c
?
答案 0 :(得分:3)
.c文件中C源的内容只是普通文本,就像它可以在.txt,.log ...中一样 唯一真正的原因是我们可以快速识别哪些文件是C代码,哪些文件不是。
答案 1 :(得分:3)
它是常规,可以是编译器的指示,对于任何给定的输入文件,文件名后缀确定完成了哪种编译:
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)
但这是一个残酷的简短回答。问题是“必要”或“强制”一词的背景。
一旦你问“'Y'平台上的'X'编译器编译需要”扩展名'.c'吗?答案将取决于X和Y.
正如Girjesh解释的那样,linux上的gcc“期望”源文件的文件扩展名为“.c”。但是在编译期间可以通过选项来避免它。
gcc -x c x.l
将编译x.l文件,将其视为c源代码。 [如果它确实是一个c源]
因此对于gcc on * nix'.c'只是一个命名约定。
来自维基百科的关于文件扩展名约定和限制的描述
文件名扩展名可以被视为元数据的一种类型。他们是 通常用于暗示有关数据存储方式的信息 在文件中。确切的定义,给出决定的标准 文件名的哪一部分是其扩展名,属于规则 使用的特定文件系统;通常扩展名是子字符串 在点字符的最后一次出现(如果有的话)之后 (例如: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
的一种类型。它们通常用于暗示有关可能存储在文件中的数据的信息。
因此,它意味着编译器关于存储的数据类型(有时,数据是如何存储的)。