多次调用main函数是C中的一个好习惯吗?
我看到了这样的C代码:
#include void main () { static int ivar = 5; printf ("%d", ivar--); if (ivar) main (); }
哪个输出:
54321
我是C的新手,我想在条件失败之前, main
方法会一次又一次地被调用。 由于我是C的新手,在上述情况下多次调用main
函数是不错的做法? 有没有真实世界的案例,这种代码非常有用?
提前致谢。
while循环更合适。 当每次递归时,你正在做一个不同的工作 – 通常是一个较小的工作,递归是有道理的。
这段代码真正做的是演示函数本地静态变量: ivar
仅在main
的第一次调用中初始化。 每次递归时,尽管有ivar=5
语句,但它会递减。
main
有特殊意义。 通俗地说,它应该初始化环境 ,然后调用一些驱动应用程序逻辑的其他函数。
无论如何,优化编译器可能会将该代码转换为迭代版本。
在您的示例中,它无关紧要,因为它只是一小段代码。 但在一般情况下,我认为调用main
是一个坏主意,原因如下:
- 可读性。 在检查程序时,没有人会认为将在一个点上调用
main
。 当你看到它时,你必须回溯并重读整个事情。 此外,main
不是一个有意义的名称,因为它不清楚递归的意图是什么。 所以我会用另一个有意义的名字编写另一个函数来反映这一点。 - 可重用性。 具有有意义名称的新函数很可能在复杂程序中的多个位置有用。
- 命令行参数。 有时您可能需要在程序中使用命令行参数。 甚至GUI程序也需要它们(用于文件关联等)。 而且您需要重新调整对main的所有调用以将其考虑在内。
- C ++兼容性。 它在C ++中是非法的。
我会说很少,如果有的话,最好调用main
函数。 如果您要进行递归,请创建一个函数来执行此操作。
这种情况不常见(我之前从未见过它),非常混乱,因为main应该在程序启动时调用一次,在程序结束时调用,在大多数实际程序中基本上都是不切实际的,因为你需要停止后续调用main()再次解析命令行。
只编写一个单独的递归函数并从main调用它并使用普通函数参数而不是静态变量更为合理。
它被称为递归 ,它可能非常有用。 例如遍历一棵树。 一些数学计算也使用递归。