如何在C中有条件地编译main()?

Cis*_*Bae 4 c testing program-entry-point compilation

我正在研究C中的一个小型开源项目,我正在尝试使用带有C的测试框架(框架min_unit).

我有一个foo.h原型文件,并foo.c与实现.

在我的测试文件中tests.c,我有

#include "../test_framework/min_unit.h"
#include "foo.c"

... test cases ...
Run Code Online (Sandbox Code Playgroud)

问题是,因为我有一个main()函数foo.c(我需要编译它),我无法编译,tests.c因为我得到一个错误,指出

note: previous definition of ‘main’ was here
int main() {
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有一种方法可以使main()函数处于foo.c有条件状态,以便在运行时它不会编译tests.c?只需要一遍又一遍地删除和添加main就太烦人了.

wol*_*k88 6

使用条件编译的最简单方法是使用#ifdef语句.例如,foo.c你有:

#ifdef NOT_TESTING //if a macro NOT_TESTING was defined
int main() {
    //main function here
}
#endif
Run Code Online (Sandbox Code Playgroud)

在里面test.c,你把:

#ifndef NOT_TESTING //if NOT_TESTING was NOT defined
int main() {
    //main function here
}
#endif
Run Code Online (Sandbox Code Playgroud)

如果要编译main函数foo.c,只需将该选项添加-DNOT_TESTING到编译命令即可.如果要编译main函数test.c,请不要添加该选项.