如何在 C 中条件编译 main()?
How to conditional compile main() in C?
我正在用 C 开发一个小型开源项目,我正在尝试使用 C 的测试框架(该框架是 min_unit
)。
我有一个包含原型的 foo.h
文件和包含实现的 foo.c
文件。
在我的测试文件中,tests.c
,我有
#include "../test_framework/min_unit.h"
#include "foo.c"
... test cases ...
问题是,因为我在 foo.c
中有一个 main()
函数(我需要编译它),我无法编译 tests.c
因为我得到一个错误州
note: previous definition of ‘main’ was here
int main() {
我的问题是,有没有办法让 foo.c
中的 main()
函数是有条件的,这样当我 运行 tests.c
?不得不一遍又一遍地删除和添加 main 真烦人。
使用条件编译最简单的方法是使用#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
当你想在foo.c
中编译main
函数时,你只需在你的编译命令中添加选项-DNOT_TESTING
。如果要在test.c
中编译main
函数,请不要添加该选项。
你没有试过使用预处理器编译条件吗?可能是您已经尝试过但它不起作用,嗯?
无论如何,你可能应该:
1- 在 "tests.c" class 文件顶部定义一个标记,例如:
#defined foo_MIN_UNIT_TEST
2- 在 "foo.c" class 文件中用 #ifndef / #endif 包围你的 "main() { ... } " 方法,例如:
#ifndef foo_MIN_UNIT_TEST //consider using #ifndef not #ifdef!!!
int main()
{ ... }
#endif
3- 这样,当您编译单元测试文件时,foo.c 的 main() 方法将不会包含在编译时,并且唯一的 main() 测试方法将可供编译器使用.
进一步阅读:http://www.cprogramming.com/
此致。
我正在用 C 开发一个小型开源项目,我正在尝试使用 C 的测试框架(该框架是 min_unit
)。
我有一个包含原型的 foo.h
文件和包含实现的 foo.c
文件。
在我的测试文件中,tests.c
,我有
#include "../test_framework/min_unit.h"
#include "foo.c"
... test cases ...
问题是,因为我在 foo.c
中有一个 main()
函数(我需要编译它),我无法编译 tests.c
因为我得到一个错误州
note: previous definition of ‘main’ was here
int main() {
我的问题是,有没有办法让 foo.c
中的 main()
函数是有条件的,这样当我 运行 tests.c
?不得不一遍又一遍地删除和添加 main 真烦人。
使用条件编译最简单的方法是使用#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
当你想在foo.c
中编译main
函数时,你只需在你的编译命令中添加选项-DNOT_TESTING
。如果要在test.c
中编译main
函数,请不要添加该选项。
你没有试过使用预处理器编译条件吗?可能是您已经尝试过但它不起作用,嗯?
无论如何,你可能应该:
1- 在 "tests.c" class 文件顶部定义一个标记,例如:
#defined foo_MIN_UNIT_TEST
2- 在 "foo.c" class 文件中用 #ifndef / #endif 包围你的 "main() { ... } " 方法,例如:
#ifndef foo_MIN_UNIT_TEST //consider using #ifndef not #ifdef!!!
int main()
{ ... }
#endif
3- 这样,当您编译单元测试文件时,foo.c 的 main() 方法将不会包含在编译时,并且唯一的 main() 测试方法将可供编译器使用.
进一步阅读:http://www.cprogramming.com/
此致。