我看到了这样的C代码:
#include <stdio.h>
void main ()
{
static int ivar = 5;
printf ("%d", ivar--);
if (ivar)
main ();
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
54321
Run Code Online (Sandbox Code Playgroud)
我是C的新手,我想在条件失败之前,这个main 方法会一次又一次地被调用.由于我是C的新手,main在上述情况下多次调用函数是不错的做法?有没有真实世界的案例,这种代码非常有用?
提前致谢.
在您的示例中,它无关紧要,因为它只是一小段代码.但在一般情况下,我认为召唤main是一个坏主意,原因如下:
main会在某一点被调用.当你看到它时,你必须回溯并重读整个事物.此外,main在不清楚递归的意图是什么的意义上,它不是一个有意义的名称.所以我会写一个有意义的名字的另一个函数来反映这一点.我会说很少,如果有的话,最好调用这个main函数.如果您要进行递归,请创建一个函数来执行此操作.
while循环更合适.当每次递归时,你正在做一个不同的工作 - 通常是一个较小的工作,递归是有道理的.
这段代码真正做的是演示函数本地静态变量:ivar只在第一次调用时初始化main.每次递归时,尽管有ivar=5声明,它都会递减.
main有特殊意义.在惯用语中,它应该初始化环境,然后调用一些驱动应用程序逻辑的其他函数.
无论如何,优化编译器可能会将该代码转换为迭代版本.