【问题标题】:main function in C with void and without void [duplicate]C中的main函数有void和没有void [重复]
【发布时间】:2019-06-16 07:10:06
【问题描述】:

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

【问题讨论】:

  • 在第二种情况下,您要调用哪个main() 参数?你展示的不是它。
  • 如果您显示确切的完整错误,它可能会更准确地告诉您我的意思。
  • 这是一种“形式”,当您使用 (void) 时,您明确声明该函数不接受任何参数。如果你稍后调用main(10);,它当然会抱怨,你只是告诉它main 没有参数(加上其他关于main 作为程序入口点的小问题......)
  • 您遇到的问题与任何常规函数有关,而不仅仅是main

标签: c parameters main


【解决方案1】:

当你定义这样的函数时:

int func() { ... }

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

当你定义这样的函数时:

int func(void) { ... }

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

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

【讨论】:

    【解决方案2】:

    一个单独的void 在参数列表中的出现明确地告诉编译器“这个函数没有参数”。

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2011-04-12
      • 2013-11-04
      • 1970-01-01
      • 2010-10-12
      • 2017-05-02
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多