&引用;main的返回类型不是int";macOS上的警告
所以我有一台MacBook Pro 2017,每当我编译一个程序作为“void main”时,编译器都会给我一个警告,告诉我main的返回类型不是int&引用;main的返回类型不是int";macOS上的警告,c,warnings,return-value,main,void,C,Warnings,Return Value,Main,Void,所以我有一台MacBook Pro 2017,每当我编译一个程序作为“void main”时,编译器都会给我一个警告,告诉我main的返回类型不是int void main(){ (...) } 正如警告所说,您应该将返回类型定义为int: int main() { // bunch of code... return 0; } 预计main()将返回一个int值。最起码的开始是: int main() { return 0; } 接受命令行参数的更正式版本: i
void main(){
(...)
}
正如警告所说,您应该将返回类型定义为
int
:
int main() {
// bunch of code...
return 0;
}
预计
main()
将返回一个int
值。最起码的开始是:
int main() {
return 0;
}
接受命令行参数的更正式版本:
int main(int argc, char** argv) {
return 0;
}
int main(void) { /* ... */ }
使用其他类型声明它会使其不兼容。一些较旧的编译器可能不在乎,但Xcode的编译器在乎
C已经存在很长一段时间了,并且从它的早期就有了很大的发展。如果您使用的是较旧的引用,您可能会发现带有非常奇怪的符号的示例,或者不再有价值的约定。当前版本的C标准要求
main
函数的返回类型为int
。因此,您需要将定义更改为intmain()
,并让它返回一个值
详细说明托管环境的第5.1.2.2.1节说明了以下内容:
1程序启动时调用的函数名为main
。实现没有声明此函数的原型<应该是
使用返回类型int
定义且不带参数:
int main(int argc, char** argv) {
return 0;
}
int main(void) { /* ... */ }
或具有两个参数(此处称为argc
和argv
,尽管有
可以使用名称,因为它们是其所在函数的本地名称
声明):
或同等的,或以某种其他实现定义的方式
请注意,int main()
的定义是允许的,因为空参数列表意味着函数不接受任何参数。根据第6.7.6.3节:
14标识符列表仅声明函数参数的标识符函数声明符中的空列表
这是该函数定义的一部分,指定
函数没有参数。函数声明符中的空列表
这不是该函数定义的一部分,它指定
提供了有关参数数量或类型的信息
将main函数指定为
void main()
是K&R时代的一个预标准化变体,不再有效。将main的返回类型更改为int:int main(){
main
应该返回int
(无论如何,在托管环境中)。是的,您将看到无数的void main的示例()
在网上和几本书中(包括一些好书)-严格来说,这些都是不正确的。使用错误的返回类型会导致未定义的行为,并且编译器不需要为未定义的行为发出诊断。不过,现在有更多的编译器正在这样做,因为这是一个非常常见的错误。可能有一些关于为什么int main()的注释
是int main(void)
?@DavidBowling Done.Hmmm的合法替代品。我想:。这不适用于这里吗?@DavidBowling啊,正确。我想的是声明而不是定义。我会更新。