C 无效主数据如何返回0?
当我从返回类型为void的函数main返回值时,为什么编译器没有给出错误?否。它不能。你做错了。不能从返回类型为C 无效主数据如何返回0?,c,visual-studio,C,Visual Studio,当我从返回类型为void的函数main返回值时,为什么编译器没有给出错误?否。它不能。你做错了。不能从返回类型为void的函数返回任何内容。编译器应给出警告: void main() { printf("hi\n"); return 0; } void main现在已过时。标准说明了main的定义 5.1.2.2.1程序启动: 1程序启动时调用的函数名为main。实现声明没有 此功能的原型。它应定义为int返回类型,且不包含 参数: [Warning] 'return' wit
void
的函数返回任何内容。编译器应给出警告:
void main()
{
printf("hi\n");
return 0;
}
void main
现在已过时。标准说明了main
的定义
5.1.2.2.1程序启动:
1程序启动时调用的函数名为main
。实现声明没有
此功能的原型。它应定义为int返回类型,且不包含
参数:
[Warning] 'return' with a value, in function returning void [enabled by default]
或具有两个参数(此处称为argc
和argv
),但任何名称都可以是
使用,因为它们是声明它们的函数的本地函数):
或同等品;10) 或者以其他实现定义的方式
主菜很特别
严格地说应该是
int main(int argc, char *argv[]) { /* ... */ }
如果您偏离了这一点(例如使用void
),编译器可能会抛出警告(如果您打开了警告),但仍然会生成有效的代码
编辑:显然,
int main()
也是有效的。您或者您的编译器做错了什么。不能从void函数返回值。编译器至少应该发出警告。您使用的是哪种编译器<在这种情况下,code>gcc会在返回void的函数中发出警告,类似于'return'…。如果打开了警告,则会发出警告。使用gcc
编译时,我得到:warning:'return'带有值,在返回void的函数中[默认启用]
看到一个更好的问题是如何首先将main
声明为void?除了int
之外的任何返回类型都是非标准的,对于main
来说真的没有意义。没关系。我知道它已经过时了。但是它不应该给我一个错误吗?@user3152736;更新了我的答案。如何在Visual Studio中打开警告?(如果你能帮忙的话)另外,如果我在能力倾向测试或面试中因为编译器的差异而在这些问题上失败了怎么办?这是谁的错?我的或不同的编译器?看起来你并不想要所有的:--但可能会对你有所帮助
int main(int argc, char *argv[]) { /* ... */ }
int main(int, char**);