1

我正在使用 VS2010 我有一个项目,其中包含多个标头和一个带有 main() 函数的文件。出于测试目的,我希望能够轻松实现另一个 main() 函数,该函数将实例化与我原来的 main 不同的东西。有没有一种简单的方法来定义 2 个“主要”功能,并在它们之间轻松切换?最好是编译 2 个二进制文件,一个从 main1() 开始,另一个在 main2(),或者它可以是需要重新编译一些文件的解决方案,没关系

4

6 回答 6

3

使用单独的编译二进制文件和单独的 main 几乎总是更好。

首先,“用于测试目的”可能包括不应该在真正的二进制文件中的代码——例如测试库代码。这需要第二个二进制文件。

其次,如果没有什么应该被省略,您仍然会遇到任何人都可以提供参数或复制并重命名二进制文件以匹配将提供此功能的 argv[0] 的问题。

我知道构建您的项目文件以创建单独的真实程序和测试程序可能很困难,但在大多数情况下,您将获得更好的结果。

于 2012-09-13T21:29:47.563 回答
1

“只能有一个” 您需要做的是创建一组子函数,这些子函数主要根据条件或通过条件编译语句调用。

于 2012-09-12T21:24:34.157 回答
1

在链接器选项中,您有入口点名称。这样你就可以拥有 main1() 和 main2():

http://msdn.microsoft.com/en-us/library/f9t8842e(v=vs.80).aspx

于 2012-09-12T21:24:58.663 回答
1
#ifdef TESTING
int main() {
    /* whatever */
}
#else
int main() {
    /* whatever else */
}
#endif
于 2012-09-12T21:43:08.037 回答
0

一个应用程序只能有一个main. 如果你想运行两件事,你需要在 main 中这样做,通过:

  • 可执行文件运行的名称(提示:第一个 argv 是可执行文件的名称)
  • 更多命令行参数 ( program -thingone)
  • 懒惰地注释掉对做某事的函数的调用。
于 2012-09-12T21:24:34.583 回答
0

除了在链接器中指定不同的入口点或拥有一个真正的 main() 来调用您想要假装为顶级函数的任何较低级别的函数之外,您还可以为您想要的每个 main() 添加一个项目。

这在 VS 中可能有点烦人,因为默认情况下没有设置单独的项目来共享源代码。其他一些 IDE 可以更容易地从共享源代码集的不同子集构建不同的可执行文件(或其他构建产品),但我从来没有发现使用 VS 的默认设置很容易。

于 2012-09-12T22:04:16.887 回答