功能原型的目的

Purpose of function prototypes

本文关键字:原型 功能      更新时间:2023-10-16

来自课堂练习:

填空打印屏幕上显示"它有效!",函数中的类型原型在调用之前
void some_func();
int main()
{
some_func();
return 0;
}
void some_func() {
cout << "it works!" << endl;
}

如果我在声明函数之后就开始使用它,为什么这段代码最终定义了它?我的意思是,我们本可以声明和定义,然后调用main。我不明白声明、调用然后定义的意义。

我刚开始学习函数。我是个初学者。

从C.S.老师的角度编辑:这个学生想知道函数原型的一般用途。这是一个典型的案例,用一个简单到可以掌握的例子来教授一个概念,但又太简单了,还没有达到目的。也许这仍然不是StackOverflow的正确问题,但至少应该出于正确的原因关闭它。这是一个非常常见且定义明确的问题。

在大多数情况下,将定义放在使用之前是非常好的。C语言唯一一次要求在使用前放入非定义声明是当两个或多个函数相互使用时,因此在定义其他函数之前,必须声明其中一个或多个子函数。我更喜欢构建一个从较小/较低部分到较大部分的模块,所以我通常把函数定义放在使用它们的例程之前。然而,老师提出这个练习可能是为了教授有关声明的概念,而不是教你使用特定的风格。

如果您还没有了解它们,您将很快了解文件。随着程序变得越来越复杂,出于几个原因,我们不再希望将所有源代码保存在一个文件中。(管理更多的代码变得更加困难。根据函数提供的某种类型的服务或使用的某种常见数据对函数进行分组可以帮助我们组织源代码,使其更易于理解。这也使在其他程序中重用函数变得更容易。(一旦我们将程序分解为单独的源文件,某些定义将不再与使用它们的例程位于同一源文件中。因此,我们根据需要在源文件中放入声明,而不是定义。在一个源文件中定义的例程foo,以及使用它的其他文件将具有foo的声明。

这带来了一个问题,即声明随后在许多地方重复。这就成为了维护的负担——每当foo的定义发生变化时,它的所有声明都必须发生变化。而且很容易出错,这可能会在程序中出错,因为与定义函数的方式不同地声明函数可能会导致不期望的行为。为了处理这个问题,一组东西的声明,通常是在一个源文件中定义的所有声明(并打算由其他源文件使用(,被收集到一个文件中,称为头文件,通常以.h结尾。然后其他源文件只包含包含它们所需声明的头文件,使用#include指令,该指令告诉编译器将头文件的内容包含在当前编译中,就好像它是当前源文件的一部分一样。

因此,您必须了解使用声明的各种方式,包括将声明放在使用声明函数的函数之前。

(我会包括C++,但它的声明可能更复杂。(