【问题标题】:Is the .c extension mandatory to source files?.c 扩展名对源文件是强制性的吗?
【发布时间】:2014-01-04 10:17:52
【问题描述】:

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

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

【问题讨论】:

  • 这是一个约定。
  • 它是特定于操作系统和编译器的。对于 Linux 和 GCC..c.c 一样好(但可读性较差)。一些构建者(例如GNU make ...)和编辑关心.c 扩展
  • @KirilKirov 搞错了对不起..
  • 您在哪个操作系统和哪个编译器上工作?
  • 文件扩展名基本上没有任何意义。内容很重要。然而,这些扩展在视觉上、语义上甚至可以帮助编译器、链接器和分析器通过遵循预期的约定来了解在哪里。

标签: c compilation file-extension


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是约定,可以作为编译器的指示,对于任何给定的输入文件,文件名后缀决定了进行哪种编译:

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

    我没有尝试其他编译器。

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

    【讨论】:

      【解决方案3】:

      NO

      但那是一个残酷的简短回答。问题是“必要”或“强制”这个词的上下文。

      只要你问“'Y'平台上的'X'编译器编译是否需要扩展名'.c'?”,答案将取决于X和Y。

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

      gcc -x c x.l
      

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

      因此 *nix '.c' 上的 gcc 只是一个命名约定。

      Check remyabel's answer

      for more info.

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2015-05-06
          • 1970-01-01
          • 2019-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-24
          • 1970-01-01
          • 2011-01-10
          相关资源
          最近更新 更多