-3

每次我写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,我该怎么做?

4

3 回答 3

5

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

如果您想要 C++ 程序中的多个入口点,最简单的可能是使用命令行参数,并main根据该参数对其他启动函数进行主要调度。

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

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

于 2012-12-04T00:08:13.430 回答
3

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

这一点的重要方面是你不“跑” a1.cpp。您在处理完之后“运行”编译器的输出a1.cpp

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

于 2012-12-03T23:59:04.573 回答
1

嗯,我认为主要区别在于 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
于 2012-12-04T00:07:57.827 回答