所有主要功能有什么区别?

时间:2019-10-28 20:32:07

标签: c

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

3 个答案:

答案 0 :(得分:1)

5.1.2.2.1程序启动

1在程序启动时调用的函数名为main。实现声明为否 此功能的原型。它应使用int的返回类型定义,并且不使用 参数:

    int main(void) { /* ... */ }
或带有两个参数(此处称为argcargv,尽管可以使用任何名称 使用,因为它们对于声明它们的函数是局部的):

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

C 2011 Online Draft

main()等效于int main(void)。在该语言的早期版本中,如果您定义的函数没有显式的返回类型,则编译器会假定它返回了int。另外,如果定义不带任何参数的函数,则表示该函数采用 no 参数。不再允许隐式键入,并且使用原型语法可以使您在编译时捕获参数数量和类型的错误,因此不应再使用此形式。

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. 即使那样,我也不会使用它,因为它保证是不可携带的。

答案 1 :(得分:0)

它们之间的区别在于,根据标准,void main()对于主功能不是有效的签名。根据标准,只有两个有效签名,分别是:

  • int main(void)
  • int main(int argc, char *argv[])

编译器可以允许其他签名,但是标准不需要。一种常见的非标准签名是:

  • int main(int argc, char *argv[], char *env[])

return语句仅返回一个整数,该整数可以将信息提供给调用方。如果您在Linux环境中,则可以像下面这样检查此值:

$ ./a.out
$ echo $?

在bash shell中,变量$?包含最后执行的命令的返回值。

您可以在此处了解有关主签名和返回值的更多信息:https://port70.net/~nsz/c/c11/n1570.html#5.1.2

答案 2 :(得分:-1)

int main是声明main()函数的唯一有效方法,其他错误。您可以选择指定参数int main(int argc, char *argv[]),但是返回类型为int是必需的。

main()函数的返回值用于告诉调用应用程序程序如何结束。返回0表示程序成功完成,而非零值则用于指示某种错误。通常在外壳脚本中对此进行测试。您也可以调用exit()函数结束程序,其参数将以相同的方式用作退出状态(这允许从函数内部终止程序)。