C 中的 main 函数有 void 和没有 void

main function in C with void and without void

这两个程序有什么区别? 第一个我得到 4,3,2,1,第二个是编译错误。

#include <stdio.h> 
int main() 
{ 
    static int i = 5; 
    if (--i){ 
        printf("%d ", i); 
        main(10); 
    } 
} 

#include <stdio.h> 
int main(void) 
{ 
    static int i = 5; 
    if (--i){ 
        printf("%d ", i); 
        main(10); 
    } 
} 

参数列表中出现一个单独的 void 明确告诉编译器 "this function takes no arguments"。

在第一个代码示例中,递归调用 main 是允许的,因为没有参数列表,它允许任意数量的参数(这可能在比你的编译器;我忘记了细节)。

声明的变量 static 存储在进程的数据部分而不是堆栈内存中,因此它们在它们的范围之外持续存在并在函数调用中保留它们的值,因此 i 在每次调用时递减直到它达到零并且您的程序达到基本情况(不要输入 if 语句),然后终止。

当您定义这样的函数时:

int func() { ... }

它说该函数接受不确定数量的参数和 returns 一个 int。因此您可以合法地传递任意数量的任意类型的参数(尽管您将无法访问它们)。

当您定义这样的函数时:

int func(void) { ... }

它说函数接受没有个参数。尝试将任何参数传递给此函数将导致编译时错误。

附带说明一下,递归调用 main 函数不是一个好主意。您最好调用另一个递归函数或只使用循环。