为什么函数声明在C ++中是强制性的而不是在C中?

所以我以前的一个考试有这个问题,到现在为止我一直在读你不需要任何语言的声明?

哪个是对的? 如果没有声明,C ++会出错,还是会运行?

在涉及C和C ++的讨论中,“函数声明”是一个相当含糊的术语。 在这方面,这些语言有很大不同。

在C ++语言中,只有一种函数声明:声明包含所有参数类型和返回类型。 这样的声明是必要的,因为C ++语言支持函数重载 。 为了选择调用哪个函数,编译器需要知道函数的所有内容,并且需要知道函数的哪些重载版本可用。 如果您“忘记”声明某些重载版本,则不会通过重载解析来考虑它。 这至少是C ++中必要的函数声明的原因之一。

在C语言中,有两种函数声明: 非原型声明和原型声明(或简称原型 )。 C中的原型与C ++声明非常相似 – 它包含所有参数类型。 标准C中一直需要原型用于可变参数函数(具有...参数的函数)。 对于非可变函数,即使在今天也不需要原型声明。 但是从C99开始,所有其他函数都需要至少非原型声明。 在较旧的C89 / 90版本的语言函数中,不需要非变量函数的声明。

所以,这基本上应该回答你的问题。 在C ++中,函数声明是必需的,因为语言特性严格依赖于它们。 在现代C函数中,还需要声明才能使代码更安全。 在旧版本的C函数声明中,主要不需要声明,因为语言被定义为在没有它们的情况下工作。

C语言中的函数声明对于遗留/向后兼容性原因不是强制性的 – 如果它们是强制性的,那么某些旧/遗留代码将停止编译。

我猜它们在C ++中是强制性的,因为C ++不是C的严格超集,所以可以做出明智的选择,使它们成为强制性的。

你应该总是声明它们 – 看到这个问题必须在C中声明函数原型吗?

C99函数声明中的 FYI现在是强制性的。

函数声明在C中是必需的。但是,原型是可选的,除了可变参数函数和函数的情况,其参数类型将被默认促销更改。

我无法回答C.

在C ++中,对于函数:

  • void foo(); 是宣言。
  • void foo() { .. }是一个定义一个声明。

在调用foo()之前,在范围内至少需要一个声明。

数据变量也是如此。