我正在阅读一篇关于C ++ vs C的文档。文档说C ++与C相比是紧密编写的。一个例子是,C允许main()
函数类型无效。另一方面,C ++不允许这样做,他从标准中给出了以下声明。
在C ++标准中:
它的返回类型为int,但其类型是实现定义的。所有实现都应允许以下两个主要定义:
int main() { /* … */ }
和
int main(int argc, char* argv[]) { /* … */ }
C标准说的相同,但有一个额外的声明。
如果返回类型与int不兼容,则返回到主机环境的终止状态未指定
表示允许不返回int的表单是故意的。
如果您有“可以实现定义的类型”的语句,那么您是否不允许C ++编译器实现社区允许void作为类型?
答案 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以外的返回类型。