首页 文章

C main vs C main

提问于
浏览
2

我正在阅读一篇关于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 回答

  • 6

    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期望前两个参数具有通常的含义 .

  • 12

    C++

    它的返回类型为int,但其类型是实现定义的 .

    这意味着返回类型 must 是int,但是main can 的参数是实现定义的 . 因此,main的实现特定参数的范围,但int返回类型的变化范围 .

    C

    C对主要的允许返回类型更宽松 . 它允许返回int以外的类型 .

相关问题