void main如何返回0?

Posted

技术标签:

【中文标题】void main如何返回0?【英文标题】:How can void main return 0? 【发布时间】:2014-02-03 17:40:04 【问题描述】:
void main()

    printf("hi\n");
    return 0;

为什么当我从函数 main 返回一个返回类型为 void 的值时编译器没有给出错误?

【问题讨论】:

您使用的是哪个编译器? gcc 在这种情况下会发出警告,类似于 'return' ..., in a function returning void 如果你打开了警告,它会产生一个警告。当使用gcc 编译时,我得到:warning: ‘return’ with a value, in function returning void [enabled by default] 见***.com/questions/204476/… 一个更好的问题是如何首先将main 声明为无效?除了int 之外的任何返回类型都是非标准的,对于main 来说真的没有意义。 【参考方案1】:

没有。它不能。你做错了。您不能从返回类型为 void 的函数返回任何内容。你的编译器应该给出一个警告:

[Warning] 'return' with a value, in function returning void [enabled by default] 

void main 现在已过时。该标准说明了main 的定义。

5.1.2.2.1 程序启动:

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

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

或带有两个参数(这里称为argcargv,尽管可以是任何名称 使用,因为它们在声明它们的函数中是本地的):

int main(int argc, char *argv[])  /* ... */ 

或等效的;10) 或以其他一些实现定义的方式。

【讨论】:

没关系..我知道它已经过时了。但它不应该给我一个错误吗? @user3152736;更新了我的答案。【参考方案2】:

主要是特殊的。

严格来说应该是

int main(int, char**);

如果您偏离了这一点(例如使用void),编译器可能会抛出警告(如果您打开了警告),但仍会生成有效代码。

编辑:显然int main() 也是有效的。

【讨论】:

如何在 Visual Studio 中开启警告? (如果你能帮忙)另外,如果我在能力测试或面试中因为编译器的差异而在这些问题上输了怎么办?是谁的错?我的还是其他编译器? 看来你不想要他们all:***.com/questions/4001736/… -- 但msdn.microsoft.com/en-us/library/vstudio/… 可能会帮助你【参考方案3】:

要么你,要么你的编译器做错了什么。您不能从 void 函数返回值。编译器至少应该发出警告。

【讨论】:

以上是关于void main如何返回0?的主要内容,如果未能解决你的问题,请参考以下文章

C--int main 和void main的区别

void main(), int main() 和int main(void)的区别

C语言中void main和int main有啥区别

void main()和main的区别

main函数的返回值范围

如果 main() 不返回 int 值会怎样?