功能原型的目的

时间:2020-02-18 14:47:25

标签: c++ function

通过课堂练习:

Fill in the blanks to print
"it works!" on the screen,
type in the function
prototype before its call.
void some_func();
int main()
{
    some_func();
    return 0;
}
void some_func() {
    cout << "it works!" << endl;
}

如果我在声明函数后立即使用该函数,为什么这段代码最后定义了它? 我的意思是,我们只需要声明和定义然后再调用main。 我的意思不是声明,调用然后定义。

我刚刚开始学习功能。我是初学者。

从C.S.老师的角度来看编辑:这位学生一直在想函数原型的目的。这是一个典型的例子,用一个简单易懂的例子讲授一个概念,但是如此简单以至于还没有达到目的。也许对于StackOverflow来说,这仍然不是正确的问题,但是至少应该出于正确的原因而关闭它。这是一个非常常见且定义明确的问题。

1 个答案:

答案 0 :(得分:2)

在大多数情况下,将定义放在使用之前是完全可以的。 C语言唯一需要您在使用前放置非定义声明的时间是两个或多个函数相互使用时,因此必须先声明一个或多个函数,然后才能定义其他函数。我更喜欢从较小/较低的部分到较大的部分构建模块,因此通常将函数定义放在使用它们的例程之前。但是,老师可能会演示此练习,以教授有关声明的概念,而不是教您使用特定的样式。

如果您尚未了解它们,您将很快了解 header 文件。随着程序变得越来越复杂,出于多种原因,我们不再希望将所有源代码保存在一个文件中。 (管理更多代码变得更加困难。通过将功能提供给他们的某种服务或与他们一起使用的某种通用数据进行分组,可以帮助我们组织源代码并使之更易于理解。这也使我们更容易在将程序分解成单独的源文件后,某些定义将不再与使用它们的例程位于同一个源文件中。因此,我们根据需要在源文件中放置声明,而不是定义。在一个源文件中定义的例程foo和使用该例程的其他文件将具有foo的声明。

这带来了一个问题,那就是在许多地方重复声明。这成为维护的负担–每当更改foo的定义时,都必须更改其所有声明。而且很容易犯错误,这可能会导致程序出错,因为以不同的方式声明函数会导致不良行为。为了解决这个问题,将一组事物的声明(通常是在一个源文件中定义的所有声明)(并打算由其他源文件使用)声明收集到一个文件中,该文件称为标头文件,并且通常以{ {1}}。然后,其他源文件仅使用.h伪指令来包含头文件,该头文件包含所需的声明,该伪指令告诉编译器将头文件的内容包括在当前编译中,就好像它是当前源文件的一部分一样。

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

(我将包括C ++,但其声明可能更复杂。)

相关问题