代码之家  ›  专栏  ›  技术社区  ›  Jim

编译器可以编译没有扩展的代码吗?

  •  2
  • Jim  · 技术社区  · 14 年前

    这是我遇到的一个随机问题,显然我不想这么做,因为这是一个不好的实践,但有没有可能编译和运行代码从一个没有扩展名的文件?这是否适用于c、c++、java、python以及其他语言?如果是这样的话,那么这个扩展是不是更像是一个设计师的财产,或者它有其他用途?

    4 回复  |  直到 14 年前
        1
  •  5
  •   bwawok    14 年前

    延期并不意味着什么。只是一种帮助你跟踪什么文件是什么的方法。(也有助于像GUI浏览器这样的东西在正确的程序中打开文件)。

    (Java可能会在意,因为语言规范中说源文件以.Java结尾,但可能有办法破解它)。

        2
  •  4
  •   smilingthax    14 年前

    这更多地取决于使用的编译器而不是语言。例如,gcc/g++有一个命令行选项 -x <language> 它允许基于文件扩展名覆盖检测。一个用例正在使用 - (即stdin)作为输入。

        3
  •  3
  •   Chris Stratton    14 年前

    这确实依赖于编译器。例如,我想有C/C++编译器调度器根据在.c或.cp中结束的文件进行一些假设,但是也可以有命令行选项来显式地指定文件应该如何处理。

        4
  •  1
  •   supercat    14 年前

    许多编译器可以在一个构建中接受多种类型的文件,并使用文件的扩展名来确定如何处理它。例如,人们可能会说:

    acmecompile foo.c bar.c fred.cpp wow.asm lib1.lib compilething.obj -o result.exe
    

    它将使用各种文件的扩展来确定前两个应该通过C编译器,下一个通过C++编译器,下一个通过汇编程序。最后两个应该直接输入到链接器。

    通常,有一些方法告诉编译器,特定的文件应该如何处理特定的方式,而不考虑它的扩展;例如,有时可能希望多目标应用程序中的一些文件被编译为C,用于某些目标,而C++用于其他项目(在我的一个项目中)。主要目标是在C中构建并使用硬件I/O寄存器;而另一个用C++构建的目标则用属性替换这些寄存器。