为什么Java可以有很多Main,你可以决定要运行哪个Java文件,但对于C++来说,你只是一个Main文件



每次我写C++时,我都需要将不同的代码放入main,有什么方法可以简化它,比如a1.cpp有main,a2.cpp有另一个main,就像在 A1 中一样.cpp

int main() {
    printf("a1");
}

在 A2 中.cpp

int main() {
    printf("a2");
}

当你运行 A1 时.cpp你会得到a1打印输出,当你运行 a2 时,你会得到字符串a2,我该怎么做?

技术性:您可以在C++程序中拥有任意数量的main函数,但在全局命名空间中只能有一个具有外部链接的函数。

如果您希望在C++程序中有多个入口点,最简单的方法可能是使用命令行参数,并根据该参数将主main调度到其他启动函数。

一种替代方法是构建多个可执行文件,每个可执行文件对应您想要的每个启动函数。您可以通过与目标代码文件与该启动函数链接来选择启动函数。或者,可以使用预处理器指令有条件地仅包含每个生成的相关main定义。

另一种替代方法(但是特定于系统)是创建具有多个导出函数的Windows DLL。然后可以通过rundll32.exe标准 Windows 程序运行 32 位这样的 DLL。

只要您不将目标文件链接在一起,它就有效。按原样,文件a1.cppa2.cppa42.cpp完全不相关。您可以将它们编译为单独的可执行文件,并单独执行它们就可以了。

这样做的重要方面是你不会"运行"a1.cpp。在编译器处理完a1.cpp后,您"运行"编译器的输出。

在C++中,main - 程序的入口点 - 驻留在全局范围内,而不是Java,它被包装在一个类中。因此,由于多个定义,您不能在单个程序中有多个main。Java等效于具有同一类(相同名称)的多个定义,这也是非法的。

嗯,我认为主要区别在于 Java 字节码是在操作系统上执行的 JVM,而C++程序是直接在操作系统上执行的,所以基本上你可以告诉 JVM 应用程序的入口点是什么,而你在操作系统上运行时,入口点是由内存位置预先解进的(至少据我所知, 如果我错了,有人纠正我),因此无法更改。虽然你可以很容易地在Windows上编写BASH脚本(用于*NIX)或*.bat文件,但它将文件名作为输入,编译它,然后执行它。在 bash 中,看起来像:

build.sh:

#!/bin/bash
gcc $1 -o prog.out && ./prog.out && rm prog.out

.

./build.sh a1.cpp
./build.sh a2.cpp

最新更新