首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数原型返回的错误

函数原型返回的错误
EN

Stack Overflow用户
提问于 2016-12-17 19:33:24
回答 2查看 100关注 0票数 0

为什么我们必须在main()函数之前使用原型?

  1. main()之后初始化自己的函数,并指定返回值的类型和输入参数的类型。为什么我必须在main()之前再做一次
  2. 我以为我可以更改返回值的类型和用函数的原型输入参数的类型,但我做不到!我拿到了这个: /tmp/ccixLbJm.o: In函数'main':learn.cpp:(.text+0x1c):未定义的对“plusValue(Double)”的引用collect2: collect2: ld返回了1个退出状态

之后

#包括使用命名空间std;双plusValue (双值);int main () { cout << plusValue(5.32) << endl;} int plusValue (int值){ value++;返回值;}

那么,如果这些原型不允许我们更改返回值和输入值,并且它们都是在main()之后指定的,那么为什么我们必须使用这些原型

EN

回答 2

Stack Overflow用户

发布于 2016-12-17 20:08:49

为了允许编译器在一次传递中解析代码,原型允许在知道完整定义之前为调用生成适当的代码,因为调用的生成只需要知道接口。

实际上,如果定义出现在main()之前,则不需要有原型声明;以下内容同样有效:

代码语言:javascript
运行
复制
#include <iostream>

double plusValue (double value)
{
    return value + 1.0 ;
}

int main() 
{
    std::cout << plusValue(5.32) << std::endl ;
}

原型声明的真正好处是,它们允许单独编译和链接,其中定义可能位于单独的翻译单元中,与所使用的定义相同,声明通常位于头文件中。

票数 1
EN

Stack Overflow用户

发布于 2016-12-17 19:38:54

函数声明的用途是您可以在函数定义之前声明一个函数,因为编译器已经知道它的返回类型是什么以及它期望的参数。您的代码当前告诉编译器,后面的代码中将有一个函数double plusValue(double value)的定义。然后在main中使用该函数,所以编译器让我们使用它。它知道函数需要一个double,这就是您传递的内容。然后,在main之后,定义一个函数plusValue,该函数接受int并返回int,这与您刚才所做的声明完全不同。然后链接器试图找到double plusValue的定义,但是它找不到它,然后你得到一个很好的链接器错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41202317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档