在Java中,我可以在每个类中都有一个主函数,只需使用我想要的函数。这通常很有用,因为我可以把测试例程放在主函数中,专门运行该类来测试它
然而,在C中,没有两个函数可以具有相同的原型,因此整个项目中只能有一个main。我可以重命名单个干线,但之后我必须乏味地编辑名称以运行感兴趣的文件。
有没有办法解决这个问题,这样我就可以有多个电源,或者这不会发生?
我的大多数C库代码都可以用-DTEST
编译,以在实现的源文件中公开main()
(通常还有一些辅助函数)。因此,如果我有一组在source.h
中声明并在source.c
中定义的函数,那么source.c
可能看起来像:
#include "source.h"
#include …other headers…
…code defining functions declared in source.h
#ifdef TEST
#include <stdio.h>
int main(void)
{
…test code…
}
#endif /* TEST */
当测试套件足够小,可以放在源文件中时,这就起作用了。如果测试比代码大,那么我会创建一个或多个包含测试代码的独立源文件。这些文件中的每一个都可以有自己的main()
,或者可以将它们设计为链接在一起——以更方便的为准。
什么是合适的取决于测试的规模和复杂性。有些函数最终会进行固定的、硬连接的测试;有些人花时间从标准输入中读取数据;另一些处理参数列表(如果提供),如果没有参数,则返回到一些最小测试。测试代码可能使用单元测试基础设施,也可能或多或少是临时的,这同样取决于代码的复杂性(和古老性)。
您可以将大部分代码放入共享库中。
然后,您将拥有一个带有"常规"main
函数的源文件,该函数可自行编译为可执行文件并使用共享库。然后,您可以编写一个单独的测试程序,该程序也链接到库中,可以运行所需的各种测试。