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

时间:2010-11-22 20:10:52

标签: compiler-construction programming-languages

这是一个随机问题,很明显我不想这样做,因为这是不好的做法,但是是否可以从没有扩展名的文件中编译和运行代码?这适用于c,c ++,java,python,任何语言吗?如果是这样,那么扩展更多的是造型师属性还是有其他目的?

4 个答案:

答案 0 :(得分:5)

扩展并不意味着什么。只是一种帮助您跟踪文件是什么的方法。 (也可以帮助GUI浏览器在正确的程序中打开文件)。

(Java可能会关心语言规范说源文件以.java结尾,但可能有办法破解它。)

答案 1 :(得分:4)

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

答案 2 :(得分:3)

这实际上是依赖于编译器的。例如,我认为有C / C ++编译器调度程序根据以.c或.cpp结尾的文件做出一些假设,但也可能有命令行选项来明确指定文件的处理方式。

答案 3 :(得分:1)

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

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

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

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