Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以对已经具有主功能的cpp文件运行测试?_C++_Unit Testing_Testing_C Preprocessor - Fatal编程技术网

C++ 是否可以对已经具有主功能的cpp文件运行测试?

C++ 是否可以对已经具有主功能的cpp文件运行测试?,c++,unit-testing,testing,c-preprocessor,C++,Unit Testing,Testing,C Preprocessor,在我得到答案之前:“将您希望测试的代码移动到另一个.cpp文件”我不能这样做。我尝试过使用预处理器#如果测试套件#endif但这不起作用,我仍然得到: “main”的多重定义 我编译代码的方式如下: g++ -lmxml -lccpunit -o pic pic.cpp wmcc.cp test.cpp 我在pic.cpp中有一个main,在test.cpp中有另一个main。有办法解决这个问题吗 更新 在my test.cpp中: #define TESTING_SUITE_1 在我的pi

在我得到答案之前:“将您希望测试的代码移动到另一个.cpp文件”我不能这样做。我尝试过使用预处理器
#如果测试套件#endif
但这不起作用,我仍然得到:

“main”的多重定义

我编译代码的方式如下:

g++ -lmxml -lccpunit -o pic pic.cpp wmcc.cp test.cpp
我在pic.cpp中有一个main,在test.cpp中有另一个main。有办法解决这个问题吗

更新

在my test.cpp中:

#define TESTING_SUITE_1
在我的pic.cpp中:

#ifndef TESTING_SUITE_1
    int main(...
#endif

不工作

您可以指定链接器的另一个入口点。 对于MS cl.exe,代码如下:(抱歉,我没有看到您使用gcc)

或通过项目属性页:

Configuration Properties >
  Linker >
    Advanced >
      Entry Point
或者直接在命令行中:

/entry:alternative_main
对于gcc,它是以下命令行开关:

-Wl,-ealternative_main

有关其他编译器,请参阅手册。

您可以通过以下方式编译:

g++ -Dmain=main_pic_moved -c pic.cpp
g++ -Dmain=main_wmcc_moved -c wmcc.cp
g++ -lmxml -lccpunit -o pic pic.o wmcc.o test.cpp

您应该能够
#ifdef
输出现有的
main()
。你尝试的时候可能做错了什么。你是怎么做到的?为什么你不能把
main
移到另一个翻译单元?@DavidRodríguez dribeas因为我有很多其他的源代码使它复杂化,这只是问题的一小部分。起初我应该这样做,但现在不行。BoBTFish我更新了我的QT代码的大小没有多大关系,你只需要将一个函数提取到不同的翻译单元:
main
我有很多其他文件、库和链接,我的意思是其他源代码。我不能简单地移动它而不破坏一切。糟糕的设计,但在发布固定版本以移植main之前,我需要一个修复。我得到:`main\u pic\u moved(int,char**)的多个定义。但我在看德梅因,用那些准确的线?我看不出这是怎么发生的。我得到了:
main
的多个定义。在手册页中找不到,版本?
-Wl,option
option
向下传递到链接器(我假定为ld)
-e
-entry
的快捷方式,并指定链接器应使用的入口点。由于。。。我不知道,很长一段时间了:哦,我现在明白了。我没有将test.cpp中的
main
更改为
alternative\u main
,因为我不明白-但在您的解释之后,我明白了。谢谢
g++ -Dmain=main_pic_moved -c pic.cpp
g++ -Dmain=main_wmcc_moved -c wmcc.cp
g++ -lmxml -lccpunit -o pic pic.o wmcc.o test.cpp