繁体   English   中英

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

[英]Why are function declaration mandatory in C++ and not in C?

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

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

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

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

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

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

出于遗留/向后兼容性的原因,C 中的 Function 声明不是强制性的 - 如果它们是强制性的,那么某处的一些旧/遗留代码将停止编译。

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

但是,您应该始终声明它们-请参阅此问题必须在 C 中声明 function 原型?

仅供参考 C99 function 声明现在是强制性的。

Function 声明在 C 中是强制性的。 然而,原型是可选的,除了可变参数函数和其参数类型将被默认提升更改的函数。

我无法回答 C。

在 C++ 中,对于功能:

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

在调用foo()之前,您至少需要在 scope 中声明一个声明。

数据变量也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM