c - 相当于.class

时间:2015-01-13 21:16:39

标签: java c class .class-file

所以,我知道在Java中,.java是人类可读的版本,而.class是编译的。

在c中,人类可读的版本是.c,但编译的类是否有任何单独的文件扩展名?

5 个答案:

答案 0 :(得分:5)

C通常为本机平台(不是字节码)生成文件。在Windows上,.exe.dll很常见。人们经常看到中间"对象"在许多平台上使用.o的文件(这些文件是中间的,因为它们尚未被链接)。有一些头文件以.h结尾。在Linux上,您通常会看到.so库和可执行文件通常没有扩展名。在Mac上,它取决于很多东西。

答案 1 :(得分:4)

.o(或.obj目标文件是已编译的.c文件,与Java的.class文件最接近。

它们可以在存档(.a)中捆绑在一起,也可以将它们链接到一个实际的程序或动态库中。

答案 2 :(得分:3)

最近的模拟是C文件被编译为目标文件(通常以.o结尾)。对象文件公开符号并链接到可执行文件中。但是,目标文件与Java .class文件不同。

答案 3 :(得分:3)

使用C编程语言编写的程序通常编译为本机可执行文件,例如Windows .exe文件。

大多数C编译器将每个源代码文件编译为目标文件,通常使用扩展名.o。链接器接收一个或多个.o文件,并从中创建本机可执行文件。

.o文件无法与Java .class文件直接比较。例如,您无法像运行Java .o文件那样执行.class文件。

答案 4 :(得分:3)

由于.class文件在Java中有多种用途,因此可能需要有几个不同的答案。

(1)当您的Java代码声明某个类型的变量,或者使用new创建某个类型的实例时,编译器需要知道哪些方法和其他成员可用于该类型,以及其他信息。在C中,这种信息必须在源头;通过包含.h个文件来完成。

(2)Java .class文件包含要执行的代码。执行程序时,会加载来自.class文件的代码;程序还可以动态加载类文件,以便在运行时之前知道其名称。对于C,代码在目标文件(Windows或Linux系统上的.o)中生成,然后链接到包含Windows上所有程序代码(.exe)的单个可执行文件中;没有扩展名在Linux上)。代码也可以在程序启动后动态引入;在Windows上,可以加载.dll动态库文件中的代码。

(3)当程序使用反射时,使用来自Java .class文件的信息。 C没有这样的概念。

(4)调试时,调试器需要的有关变量,方法等的信息保存在.class个文件中。对于C,它通常以符号表中的特殊格式保存在目标文件中(例如DWARFSTABS)。通常,在运行C编译器时必须添加一个标志,以使其存储额外的信息。