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

Why are function declaration mandatory in C++ and not in C?

本文关键字:而在 强制性 c++ 函数 为什么 声明      更新时间:2023-10-16

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

哪个是正确的?如果没有声明,c++会给出错误,还是会运行?

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

在c++语言中只有一种函数声明:具有所有参数类型和返回类型的声明。这样的声明是必要的,因为c++语言支持函数重载。为了选择调用哪个函数,编译器需要知道关于函数的所有信息,并且需要知道函数的哪些重载版本是可用的。如果你"忘记"声明某个重载版本,它将不会被重载解析考虑。这至少是c++中必须声明函数的原因之一。

在C语言中有两种函数声明:非原型声明和原型声明(或者简单的原型)。C中的原型非常类似于c++的声明——它包含了所有的参数类型。在标准C中,变量函数(带有...参数的函数)总是需要原型。对于非可变函数,即使在今天也不需要声明原型。但是从C99开始,所有其他函数至少需要非原型声明。在旧的C89/90版本中,不需要为非可变函数声明函数。

那么,这应该基本上回答了你的问题。在c++中,函数声明是必需的,因为语言特性严重依赖于它们。在现代C语言中,函数声明也是为了使代码更安全。在旧版本的C语言中,不需要函数声明,主要是因为该语言被定义为不需要函数声明。

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

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

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

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

函数声明在c语言中是强制性的。然而,原型是可选的,除非是可变函数和参数类型会被默认提升改变的函数。

我不能回答c。

在c++中,对于函数:
  • void foo();是一个声明
  • void foo() { .. }为定义为声明。

在调用foo()之前,需要在作用域中至少有一个声明。

相关文章: