C 中的主要函数有空和没有空



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

当你定义这样的函数时:

int func() { ... }

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

当你定义这样的函数时:

int func(void) { ... }

它说该函数带任何参数。 尝试将任何参数传递给此函数将导致编译时错误。

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

参数

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

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

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

相关内容

  • 没有找到相关文章

最新更新