C中的主要功能有无空

时间:2019-01-22 18:47:31

标签: c parameters main

这两个程序有什么区别? 我得到的第一个是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); 
    } 
} 

2 个答案:

答案 0 :(得分:2)

在参数列表中出现单独的void会明确告诉编译器“此函数不带参数”。

在第一个代码示例中,由于没有参数列表,因此允许递归调用main,该列表允许任意数量的参数(在比您的编译器支持的最新C标准中可能已更改的参数列表) ;我忘记了细节。

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

答案 1 :(得分:2)

当您定义这样的函数时:

int func() { ... }

它表示该函数接受不确定数量的参数并返回int。因此,您可以合法地传递任意数量的任何类型的参数(尽管您将无法访问它们)。

当您定义这样的函数时:

int func(void) { ... }

它表示该函数接受 no 参数。尝试将任何参数传递给此函数将导致编译时错误。

另一方面,递归调用main函数不是一个好主意。最好不要调用另一个递归函数或只使用循环。