编译文件名和源文件名之间的区别



我刚刚开始学习C,我想知道:

  • 编译文件名和源文件名有什么区别?

例如,为什么我要有一个编译的文件名cat和一个源文件名cat.c

可执行文件的名称可以是任何内容,只要操作系统可以接受它。

默认情况下,某些构建工具将可执行文件命名为a.out。在许多常见的Unix工具中,这很容易通过命令行开关-oname更改,它说将输出文件放在名为name的文件中。

可执行文件会自动成为命令,因为当在命令行 shell 中键入命令并且该命令不是内置于 shell 中的命令时,shell 会查找具有该名称的文件,如果该文件是可执行文件,则会执行该文件。使用此功能时,您希望文件名对用户有意义。a.out不是通用的,也不是特别有意义,因此程序通常被赋予其他名称。

对于简单的程序,唯一源文件或主源文件的名称通常用作可执行文件的名称(反之亦然),除了源文件作为指定其编程语言的扩展名(如.c)和可执行文件要么没有扩展名,要么具有一些扩展名,如.exe(用于"可执行文件")。

命令行 shell 可能只在某些目录中查找可执行文件。通常可以告诉他们搜索当前目录,但这不是一个好主意,因为它使得在打算运行一个程序时意外运行另一个程序变得太容易了。特别是,如果 shell 对搜索可执行文件的位置松懈,攻击者可能能够让一个人或程序运行攻击者控制的程序。因此,您通常需要使用./name在当前目录中运行程序,这表明您有意要在当前目录中运行程序。

许多人在他们的主文件夹中指定一个目录,他们在其中放置可执行文件,并将该目录添加到他们的 shell 搜索可执行文件的路径中。

编程语言要么是"解释的",要么是"编译的"(或两者兼而有之)。

解释型语言就像 Python:您可以输入单个表达式,当您按 Enter 时,它们将被计算。

C 和 Java 都是编译语言:您不能输入单个命令。相反,您必须先将代码"编译"为可执行的二进制格式。

按照惯例,如果我们有一个 我们要调用prog的C程序 ,我们将在prog.c中拥有我们的C源代码,并将我们的可执行文件编译到文件prog

如果您想知道如何编译 C 程序,gcc -o prog prog.c很好开始。如果您对编译有疑问,请随时发表评论。

在 C 和 C++ 等编译语言中,您只能运行已编译的文件。在这些语言中,不能运行源文件。将基于文本的源文件编译为二进制编译文件(可执行文件),以便可以运行该程序。

您几乎可以命名任何您想要的任何文件,但它们必须保持独立且不同的文件,因为一个文件是从另一个文件生成的。

最新更新