"主要的返回类型不是int" macOS警告

时间:2017-12-01 16:05:54

标签: c warnings return-value main void

所以我有一台MacBook Pro 2017,每当我编译一个程序为" void main"时,编译器会给我一个警告,说main的返回类型不是int ...

void main(){

(...)

}

3 个答案:

答案 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) { /* ... */ }
     

或有两个参数(此处称为argcargv,尽管如此   可以使用名称,因为它们是它们所在的函数的本地名称   声明):

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已经存在了很长时间,并且从早期开始就已经发生了很大的变化。如果您使用的是较旧的引用,则可能会发现包含非常奇怪的符号的示例或不再有价值的约定。