我正在阅读一篇关于C++与C的文档。该文档说,与C相比,C++写得很紧。一个例子是,C允许main()
函数类型为void。另一方面,C++不允许这样做,他从标准中给出了以下声明。
在C++标准中:
它的返回类型应为int,但除此之外,它的类型是实现定义的。所有实施都应允许以下两个主要定义:
int main() { /* … */ }
和
int main(int argc, char* argv[]) { /* … */ }
C标准说的是一样的,但有一个额外的声明。
如果返回类型与int不兼容,则返回到主机环境的终止状态为未指定
这表明允许不返回int的表单是有意的。
当你有";类型可以是实现定义的";您是否不允许C++编译器实现社区允许void作为一种类型?
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++希望前两个参数具有通常的含义。
C++
它的返回类型应为int,否则其类型为实现定义。
这意味着返回类型必须为int,但main的参数可以实现定义。因此,main有实现特定参数的作用域,但没有int返回类型的变化范围。
C
C比main的允许返回类型更宽容。它确实允许int以外的返回类型。