2012-09-12 44 views
1

我使用VS2010 我有几个头一个项目,一个文件与main()函数。 为了测试的目的,我希望能够轻松实现另一个main()函数,该函数会实现与原始主体不同的东西。 有没有简单的方法来定义2“主”功能,并轻松地在它们之间切换? 最好的做法是编译2个二进制文件,一个在main1()开始,另一个在main2(),或者它可以是需要重新编译某些文件的解决方案,无所谓轻松切换不同的main()

+2

真的很重要什么叫不同的功能?在同一个Visual C++ 2010项目中不能有多个'main'函数,但可以有条件地从'main'内部调用任何你喜欢的函数。 –

+0

这是一个愚蠢的想法。 –

回答

1

在连接选项你有入口点的名字。这样,您就可以拥有MAIN1()和MAIN2():

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

+0

不,这会跳过整个CRT初始化,并且围绕着一个可怕的想法。 –

+0

这不是一个好主意。这可能导致具有相同名称和不同功能的多个二进制文件。 –

+0

@CatPlusPlus AFAIK,这并没有设置真正的入口点,而是由真正的main调用的入口点,所以CRT init不会被跳过 - 就像静态变量构造函数不是。 –

1

“只有一个“你需要做的是创建一组主要调用条件或条件编译语句的子函数。

0

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

  • 可执行文件运行的名称(提示:第一argv的是可执行文件的名称)
  • 进一步的命令行参数(program -thingone
  • 懒洋洋地对那些做某事的函数进行注释。
1
#ifdef TESTING 
int main() { 
    /* whatever */ 
} 
#else 
int main() { 
    /* whatever else */ 
} 
#endif 
0

除了在连接指定不同的入口点或者有一个真正的main()调用要假装取较低的水平功能是一个顶级函数,你可以为每个你想要的main()添加一个项目。

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

3

你几乎总是使用一个单独的编译二进制文件和单独的主文件。

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

其次,如果有什么东西是应该被忽略,你还有任何人都可以提供一个参数或复制和重命名二进制相匹配的argv [0],这将使该功能的问题。

我知道这可能很难建筑师项目文件创建单独的真实测试程序,但在大多数情况下,你将有一个更好的结果。