2010-11-22 108 views
2

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

+2

文件扩展名不代表任何内容。我可以命名带有.jpg结尾的HTML文件。它只是磁盘上的数据:软件如何解释数据是重要的。 – 2010-11-22 20:26:16

回答

5

扩展名并不意味着什么。只是一种方法来帮助你跟踪什么文件是什么。 (也可以帮助像GUI浏览器这样的东西在正确的程序中打开文件)。 (Java可能在意语言规范说源文件以.java结尾,但可能有办法破解它)。

+1

当然,编译器前端更难以为多种语言提供服务。但是,是的,文件扩展名不如许多人想象的那么重要。 – delnan 2010-11-22 20:26:24

3

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

4

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

+0

如果你甚至不需要文件,你怎么需要扩展? :) – BCS 2010-11-24 01:34:13

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++构建的目标用属性替换这些寄存器)。

相关问题