每次我写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.cpp
、a2.cpp
、a42.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