【问题标题】:How can void main return 0?void main如何返回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]
  • 一个更好的问题是如何首先将main 声明为无效?除了int 之外的任何返回类型都是非标准的,对于main 来说真的没有意义。

标签: c visual-studio


【解决方案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() 也是有效的。

【讨论】:

【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2019-01-01
    • 2015-10-03
    相关资源
    最近更新 更多