我正在使用C中的一个小型开源项目,我正在尝试使用带有C的测试框架(框架为min_unit
)。
我有一个带有原型的foo.h
文件,以及foo.c
,带有实现。
在我的测试文件tests.c
中,我有
#include "../test_framework/min_unit.h"
#include "foo.c"
... test cases ...
问题是,因为我在main()
中有foo.c
函数(我需要编译它),我无法编译tests.c
,因为我收到一条错误,指出< / p>
note: previous definition of ‘main’ was here
int main() {
我的问题是,有没有办法让main()
中的foo.c
函数是有条件的,所以当我运行tests.c
时它不会编译?只需要一遍又一遍地删除和添加主页就太烦人了。
答案 0 :(得分:6)
使用条件编译的最简单方法是使用#ifdef
语句。例如,在foo.c
中你有:
#ifdef NOT_TESTING //if a macro NOT_TESTING was defined
int main() {
//main function here
}
#endif
在test.c
中,你放了:
#ifndef NOT_TESTING //if NOT_TESTING was NOT defined
int main() {
//main function here
}
#endif
如果要编译main
中的foo.c
函数,只需将选项-DNOT_TESTING
添加到编译命令即可。如果要编译main
中的test.c
函数,请不要添加该选项。
答案 1 :(得分:1)
您是否尝试使用预处理器编译条件?可能是你已经尝试但它不起作用,哼?
无论如何,你可能应该:
1-在&#34; tests.c&#34;顶部定义一个令牌。类文件如:
#defined foo_MIN_UNIT_TEST
2-围绕你的&#34; main(){...}&#34;方法&#34; foo.c&#34;类文件#ifndef / #endif,如:
#ifndef foo_MIN_UNIT_TEST //consider using #ifndef not #ifdef!!!
int main()
{ ... }
#endif
3-这样,当您编译单元测试文件时,foo.c的main()方法将不会包含在编译时间内,并且编译器可以使用唯一的main()测试方法。
进一步阅读:http://www.cprogramming.com/
问候。