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
函数不是一个好主意。您最好调用另一个递归函数或只使用循环。
这两个程序有什么区别? 第一个我得到 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
函数不是一个好主意。您最好调用另一个递归函数或只使用循环。