C语言 'main'的传回型别不是'int'

hec6srdp  于 2022-12-03  发布在  其他
关注(0)|答案(6)|浏览(162)

我在学习C语言的时候,写了下面的代码:

#include <stdio.h>
void main()
{
  char ch='a';
  printf("%c\n", ch);
}

然后我用愚者编译代码,但我得到一个错误:

return type of 'main' is not 'int' [-Wmain-return-type]

我没有使用任何数据类型int,怎么了?

9jyewag0

9jyewag01#

正如编译器告诉您的,main()必须返回int

int main(void)
{
    return 0;
}

返回值是程序的退出代码。

pu82cl6c

pu82cl6c2#

在这种情况下,您需要使用

#include <...>
int main(){
//code
return 0; //or return any_integer;
}

如果您的程序返回 nothing,系统将永远不会知道运行是否成功或是否存在一些错误。

evrscar2

evrscar23#

用途:

int main(void) { /* ... */ }

不带参数的main函数的定义。请注意,int main() { /* ... */ }也有效,但首选前一种定义。

nsc4cvqm

nsc4cvqm4#

养成使用的习惯:

int main( int argc, char* argv[] ){

  // your code

  return 0;
}

argc是传递给程序的参数数。
argv是字符串中的参数数组。

waxmsbnn

waxmsbnn5#

错误的意思是,main()应该返回int。使main()为int类型并返回一个有效的退出条件整数,通常终止是return 0。请参考前面的SO answer

gz5pxeao

gz5pxeao6#

好了,大家都在谈论在操作系统下运行C程序。这是完全正确的:

  • 从标准点看,自main * 应 * 返回int
  • 从操作系统的Angular 来看,因为从main返回的intMap到程序的退出代码。

但是没有人会提到在实现C程序时当然会发生的其他不常见的情况:例如,未在任何操作系统下运行的C二进制文件、由于没有人接收或解释值而不从其主文件返回任何内容的C二进制文件、实际上 * 是 * 操作系统的C二进制文件或控制嵌入式系统的C二进制文件,在嵌入式系统中,其主要功能是在无限循环内同步其组件,等待请愿(根据定义永远不会回来)。前面的例子或多或少是等效的。
在这些情况下,即使编译器抱怨,也可以像下面这样定义main:

void main()
{
...
}

你必须认真对待警告,但更重要的是了解你实际上在做什么。这是C:权力越大,责任越大。
如果你在这种情况下,main的定义并不重要,因为没有人可以调用它,也没有人可以接收它的退出值。
无论如何,在这些情况下,对主签名没有真实的的关注,并且如果将这些C程序定义为void main()int main(int argc, char* argv[]),优化似乎不像是这些C程序的改进特征。
所以,结论:

  • 当期望在操作系统下运行时(我认为大多数情况下都是这样):使用主int main(int argc, char* argv[])的标准定义。针对这些情况考虑了gcc的警告。
  • 如果没有操作系统:做你喜欢的,这并不重要,除了有一个恼人的警告,在那些确切的情况下没有意义的事实。

相关问题