C ++ main vs C main

时间:2012-03-04 11:30:30

标签: c++ c standards main

我正在阅读一篇关于C ++ vs C的文档。文档说C ++与C相比是紧密编写的。一个例子是,C允许main()函数类型无效。另一方面,C ++不允许这样做,他从标准中给出了以下声明。

在C ++标准中:

  

它的返回类型为int,但其类型是实现定义的。所有实现都应允许以下两个主要定义:

int main() { /* … */ }
     

int main(int argc, char* argv[]) { /* … */ }

C标准说的相同,但有一个额外的声明。

  

如果返回类型与int不兼容,则返回到主机环境的终止状态未指定

表示允许不返回int的表单是故意的。

如果您有“可以实现定义的类型”的语句,那么您是否不允许C ++编译器实现社区允许void作为类型?

2 个答案:

答案 0 :(得分:12)

C和C ++都要求语言的任何实现都必须支持表单int main(void)int main(int, char**)。但是,标准还说实现可能支持其他表单,因此使用其他表单之一的程序不会自动无效 - 相反,它只是一个有效的程序在某些平台上得到支持。

在这方面,C和C ++之间的唯一区别是允许使用替代形式的main。在C ++中,所有表单都必须返回int,因此只允许参数变化,而且,如果任何表单的前两个参数是int, char**,则它们是 应具有通常的含义。

C更加自由,因为它允许任何替代形式的main。因此,具有void main(char, double)的程序是一个有效的C程序,它需要实现来支持这个签名,而它无条件地是不正确的C ++。另一方面,int main(int, char**, char**)是C和C ++的允许签名,也需要实现支持,而C ++会期望前两个参数具有通常的含义。

答案 1 :(得分:6)

<强> C ++

  

它的返回类型为int,否则其类型为   实现定义的。

这意味着返回类型必须为int,但主的参数可以是实现定义的。因此,main的实现特定参数有作用域,但int返回类型没有变化范围。

<强> C

C对main的允许返回类型更宽松。它允许返回int以外的返回类型。