首页 > 解决方案 > 所有主要功能有什么区别?

问题描述

C中的main,void main和int main有什么区别?他们每个人都做什么?还有什么是 return 0; 用于?我知道它以某种方式告诉操作系统该程序已成功完成,但它必须提供什么?我想指出,我在 C 上工作了一个多月,所以我没有真正的经验

标签: c

解决方案


5.1.2.2.1 程序启动

1 程序启动时调用的函数名为main。实现没有声明这个函数的原型。它应定义为返回类型为 int 且不带参数:

    int main(void) { /* ... */ }
或带有两个参数(这里称为argcand argv,尽管可以使用任何名称,因为它们对于声明它们的函数是本地的):

    int main(int argc, char *argv[]) { /* ... */ }
或同等学历; 10)或以其他一些实现定义的方式。
10) 因此,int可以替换为定义为 的 typedef 名称int,或者argv可以写为 的类型char ** argv,依此类推。

C 2011 在线草案

main()相当于int main(void)。在该语言的早期版本中,如果您定义了一个没有显式返回类型的函数,编译器会假定它返回int. 此外,如果您定义一个没有任何参数的函数,这意味着该函数不带任何参数。不再允许隐式类型,使用原型语法可以让您在编译时捕获参数数量和类型的错误,因此不应再使用这种形式。

void main()不是标准的,除非您的实现明确将其记录为main(“或以某种其他实现定义的方式”)1的有效签名,否则不应使用。否则,使用它会导致未定义的行为,这可能会导致您的代码在启动或退出时行为异常。有些平台运行时没有明显问题,但你不应该相信这是真的。

5.1.2.2.3 程序终止

1 如果main函数的返回类型是与 兼容的类型int,则从函数的初始调用返回main相当于以exit函数返回的值main作为参数调用函数;11)到达}终止 main函数返回值0。如果返回类型与 不兼容int,则返回到宿主环境的终止状态未指定。
11) 根据 6.2.4,在前一种情况下声明了自动存储持续时间的对象的生命周期main 将结束,即使在后者中它们不会有。

C 程序向运行时环境返回一个状态码 - 在 *nix 和类似平台上,返回码 0 表示成功、正常程序终止。 stdlib.h定义宏EXIT_SUCCESSEXIT_FAILURE,应该使用它来代替文字数值:

#include <stdlib.h>
...
int main( void )
{
  ...
  if ( something_bad_happens )
    return EXIT_FAILURE;
  ...
  return EXIT_SUCCESS;
}


  1. 即使那样,我也不会使用它,因为它保证是不可移植的。


推荐阅读