我怎么有main的多个定义?

时间:2019-01-18 04:36:54

标签: java c main

在Java中,我可以在每个类中都有一个main函数,并且只使用我想要的一个。这通常很有用,因为我可以将测试例程放在运行该类的主函数中以专门对其进行测试。

但是,在C语言中,没有两个函数可以具有相同的原型,因此在整个项目中只能有一个主函数。我可以重命名单个电源,但随后必须繁琐地编辑名称以运行感兴趣的文件。

有没有解决的办法,所以我可以有多个电源,还是只是不会发生?

2 个答案:

答案 0 :(得分:3)

我的大多数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(),也可以将它们设计为链接在一起-看起来更方便。

什么是合适的取决于测试的大小和复杂性。某些功能最终以固定(硬连线)测试进行;有些人花时间从标准输入中读取数据;其他人则处理参数列表(如果提供),如果没有参数,则进行一些最小的测试。再次取决于代码的复杂性(和古代),测试代码可能使用单元测试基础结构,或者可能是临时的。

答案 1 :(得分:2)

您可以将大部分代码放入共享库中。

您将拥有一个带有“常规” main函数的源文件,该函数本身会编译为可执行文件并使用共享库。然后,您可以编写一个单独的测试程序,该程序也链接到可以运行所需各种测试的库中。