我正在阅读一篇关于C vs C的文档 . 文档说C与C相比是紧密编写的 . 一个例子是,C允许 main()
函数类型无效 . 另一方面,C不允许这样做,他从标准中给出了以下声明 .
在C标准中:
它的返回类型为int,但其类型是实现定义的 . 所有实现都应允许以下两个main定义:int main(){/ * ... * /}
和int main(int argc,char * argv []){/ * ... * /}
C标准说的相同,但有一个额外的声明 .
如果返回类型与int不兼容,则返回到主机环境的终止状态未指定
这表明允许不返回int的表单是故意的 .
如果你有语句“类型可以实现定义”,你是否不允许C编译器实现社区允许void作为一个类型?
2 回答
C和C都要求语言的任何实现都必须支持表单
int main(void)
和int main(int, char**)
. 但是,标准还说实现可能支持其他形式,因此使用其他形式之一的程序不会自动失效 - 相反,它只是在某些平台上才支持的有效程序 .在这方面,C和C之间的唯一区别是允许使用哪种替代形式 . 在C中,所有表单都必须返回
int
,因此只允许参数变化,而且,如果任何形式的前两个参数都是int, char**
,它们应具有通常的含义 .C更自由一点,因为它允许任何替代形式的
main
. 因此,具有void main(char, double)
的程序是一个有效的C程序,它要求实现支持此签名,而它将无条件地形成错误的C . 另一方面,int main(int, char**, char**)
是C和C的允许签名,也需要实现支持,C期望前两个参数具有通常的含义 .C++
这意味着返回类型 must 是int,但是main can 的参数是实现定义的 . 因此,main的实现特定参数的范围,但int返回类型的变化范围 .
C
C对主要的允许返回类型更宽松 . 它允许返回int以外的类型 .