每次我写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
,我该怎么做?
技术性:您可以main
在 C++ 程序中拥有任意数量的函数,但在全局命名空间中只有一个具有外部链接。
如果您想要 C++ 程序中的多个入口点,最简单的可能是使用命令行参数,并main
根据该参数对其他启动函数进行主要调度。
一种替代方法是构建多个可执行文件,一个用于您想要的每个启动功能。您可以通过与具有该启动功能的目标代码文件链接来选择启动功能。或者,您可以使用预处理器指令有条件地仅包含每个构建的相关定义main
。
另一种选择是创建一个具有多个导出函数的 Windows DLL,但它是特定于系统的。然后可以通过rundll32.exe
标准 Windows 程序运行 32 位这样的 DLL。
只要您不将目标文件链接在一起,它就有效。按原样,文件a1.cpp
, a2.cpp
,a42.cpp
完全不相关。您可以将它们编译为单独的可执行文件,然后单独执行它们就可以了。
这一点的重要方面是你不“跑” a1.cpp
。您在处理完之后“运行”编译器的输出a1.cpp
。
在 C++ 中,main
——程序的入口点——驻留在全局范围内,与 Java 不同,它被包装在一个类中。因此,由于多重定义,您不能main
在单个程序中有多个 s 。与此等效的 Java 将具有同一类(相同名称)的多个定义,这也是非法的。
嗯,我认为主要区别在于 Java 字节码是在 JVM 上执行的,它是在 OS 上执行的,而 C++ 程序是直接在 OS 上执行的,所以基本上你可以告诉 JVM 应用程序的入口点是什么,而你在 OS 上运行入口点是由内存位置预先定义的(至少据我所知,如果我错了,有人纠正我),因此无法更改。虽然您可以轻松地编写 BASH 脚本(用于 *NIX)或 Windows 上的 *.bat 文件,但它们会将文件名作为输入,编译它,然后执行它。在 bash 中看起来像:
构建.sh:
#!/bin/bash
gcc $1 -o prog.out && ./prog.out && rm prog.out
.
./build.sh a1.cpp
./build.sh a2.cpp