所以我有一台MacBook Pro 2017,每当我编译一个程序为" void main"时,编译器会给我一个警告,说main的返回类型不是int ...
void main(){
(...)
}
答案 0 :(得分:3)
与警告一样,您应该将返回类型定义为int
:
int main() {
// bunch of code...
return 0;
}
答案 1 :(得分:3)
C标准的当前版本要求main
函数的返回类型为int
。因此,您需要将定义更改为int main()
并让它返回一个值。
C standard详细说明托管环境的第5.1.2.2.1节说明了以下内容:
1 程序启动时调用的函数名为
main
。该实现声明此函数没有原型。 应该是 使用返回类型int
定义且没有参数:int main(void) { /* ... */ }
或有两个参数(此处称为
argc
和argv
,尽管如此 可以使用名称,因为它们是它们所在的函数的本地名称 声明):int main(int argc, char *argv[]) { /* ... */ }
或等效或以其他一些实现定义的方式。
请注意,int main()
的定义是允许的,因为空参数列表表示该函数不带参数。从第6.7.6.3节开始:
14 标识符列表仅声明函数参数的标识符。 函数声明符中的空列表 这是该函数定义的一部分指定了 function没有参数。函数声明符中的空列表 这不是该函数定义的一部分,指定不 提供有关参数数量或类型的信息。
将主要功能指定为void main()
是K& R天的预标准版本,不再有效。
答案 2 :(得分:0)
预计main()
将返回int
值。最小的开始是:
int main() {
return 0;
}
接受命令行参数的更正式的版本:
int main(int argc, char** argv) {
return 0;
}
使用其他类型声明它会使其不兼容。一些较旧的编译器可能不关心,但Xcode的确如此。
C已经存在了很长时间,并且从早期开始就已经发生了很大的变化。如果您使用的是较旧的引用,则可能会发现包含非常奇怪的符号的示例或不再有价值的约定。