为什么我们必须在main()
函数之前使用原型?
main()
之后初始化自己的函数,并指定返回值的类型和输入参数的类型。为什么我必须在main()
之前再做一次之后
#包括使用命名空间std;双plusValue (双值);int main () { cout << plusValue(5.32) << endl;} int plusValue (int值){ value++;返回值;}
那么,如果这些原型不允许我们更改返回值和输入值,并且它们都是在main()
之后指定的,那么为什么我们必须使用这些原型
发布于 2016-12-17 20:08:49
为了允许编译器在一次传递中解析代码,原型允许在知道完整定义之前为调用生成适当的代码,因为调用的生成只需要知道接口。
实际上,如果定义出现在main()
之前,则不需要有原型声明;以下内容同样有效:
#include <iostream>
double plusValue (double value)
{
return value + 1.0 ;
}
int main()
{
std::cout << plusValue(5.32) << std::endl ;
}
原型声明的真正好处是,它们允许单独编译和链接,其中定义可能位于单独的翻译单元中,与所使用的定义相同,声明通常位于头文件中。
发布于 2016-12-17 19:38:54
函数声明的用途是您可以在函数定义之前声明一个函数,因为编译器已经知道它的返回类型是什么以及它期望的参数。您的代码当前告诉编译器,后面的代码中将有一个函数double plusValue(double value)
的定义。然后在main
中使用该函数,所以编译器让我们使用它。它知道函数需要一个double
,这就是您传递的内容。然后,在main
之后,定义一个函数plusValue
,该函数接受int
并返回int
,这与您刚才所做的声明完全不同。然后链接器试图找到double plusValue
的定义,但是它找不到它,然后你得到一个很好的链接器错误。
https://stackoverflow.com/questions/41202317
复制相似问题