Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我怎样才能有多个main的定义?_Java_C_Main - Fatal编程技术网

Java 我怎样才能有多个main的定义?

Java 我怎样才能有多个main的定义?,java,c,main,Java,C,Main,在Java中,我可以在每个类中都有一个主函数,并且只使用我想要的一个。这通常很有用,因为我可以将测试例程放在主函数中,专门运行该类来测试它 然而,在C语言中,没有两个函数可以具有相同的原型,因此整个项目中只能有一个main。我可以重命名各个电源,但随后我必须繁琐地编辑名称以运行感兴趣的文件 有没有办法解决这个问题,这样我就可以有多个主电源,或者这是不会发生的?您可以将大部分代码放在一个共享库中 然后,您将拥有一个带有“常规”main函数的源文件,该函数可自行编译为可执行文件并使用共享库。然后,您

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

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


有没有办法解决这个问题,这样我就可以有多个主电源,或者这是不会发生的?

您可以将大部分代码放在一个共享库中


然后,您将拥有一个带有“常规”
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 */
#包括“source.h”
#包括…其他标题…
…定义source.h中声明的函数的代码
#ifdef试验
#包括
内部主(空)
{
…测试代码…
}
#endif/*测试*/
当测试套件足够小,可以放入源文件时,这种方法就可以工作了。如果测试比代码大,那么我将创建一个或多个包含测试代码的独立源文件。这些文件中的每一个都可以有自己的
main()
,或者可以将它们设计为链接在一起-以更方便的为准


什么是合适的取决于测试的大小和复杂性。一些功能以固定硬接线测试结束;有些人花时间从标准输入读取数据;如果提供了其他参数,则处理参数列表,如果没有参数,则返回一些最小测试。测试代码可能使用单元测试基础设施,也可能或多或少是特别的,这同样取决于代码的复杂性(和古老性)。

不相关的问题,但使用自己的
main()方法测试类是否标准和/或明智?我从没听说过有人这样做。@Zephyr在Java中,它很方便,因为您只需运行那个类,“Java myclasstotest.class”,所以只要您在那个类中有一个main,它就会运行那个特定的main。举个例子,如果你有一个类有一堆实用函数,那么这个类中的main可以对这些实用函数进行测试。不,我完全理解它的方便性。我只是不知道在我所有的课程中使用这样的公共方法是否是个好主意。我喜欢这个主意;我只是好奇这是否是一个好的实践。@Zephyr-听起来像是一个懒散的方法,没有适当的单元测试。不,这样写不是一个好的实践。您的单元测试应该始终在
test
包中的一个单独的测试类中。如果不这样做,测试代码将与源代码一起打包(在
main
包中)。这很糟糕。是的,我想写一个单独的测试程序是很自然的方式,但是当然,对于每一个函数体,我都有两个文件,主源文件和测试文件。这是一个很好的方法。非常简单和直接。请注意中的讨论和规则。上述大纲代码遵守NASA GSFC规则,在任何其他标题之前包含
source.h
,从而检查标题是否可以单独使用(只需编写
#包含“source.h”
),并提供所有必要的声明;没有其他必要的标题。这是一个简单而有价值的技巧,有助于确保代码(可重用)。