gpt4 book ai didi

c++ - 函数原型(prototype)返回错误

转载 作者:行者123 更新时间:2023-11-28 01:55:52 26 4
gpt4 key购买 nike

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

  1. 我在 main() 之后初始化了我自己的函数,并且我指定了返回值的类型和输入参数的类型。为什么我必须在 main() 之前再做一次?

  2. 我以为我可以用函数的原型(prototype)改变返回值的类型和输入参数的类型,但我做不到!我明白了:

    /tmp/ccixLbJm.o: In function 'main': learn.cpp:(.text+0x1c): undefined reference to 'plusValue(double)' collect2: error: ld returned 1 exit status

    之后

    #include <iostream>

    using namespace std;

    double plusValue(double value);

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


    int plusValue (int value){
    value++;
    return value;
    }

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

最佳答案

函数声明与其定义不相等。

double plusValue(double value)

不等于

int plusValue (int value)

代码应该是这样的

#include <iostream>

double plusValue(double value); // function declaration

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

double plusValue(double value){ //function definition
value += 1;
return value;
}

总结评论,我们必须在使用它之前声明我们的函数。函数声明告诉编译器函数返回值以及参数的数量和类型。没有这些信息,编译器就不知道如何与我们的函数交互(交互意味着将参数传递给堆栈并获取返回值)。还需要函数定义,函数定义是函数实际的可执行体,所以你必须定义它,但不一定要在你声明的文件中定义。您可以在另一个文件或库中定义函数。

如果你不声明一个函数并定义它,编译器会为你隐式声明它,一些编译器需要在使用该函数之前声明(或隐式声明),所以如果你只想定义函数而不用声明它,您必须在使用该函数之前放置定义。

正如 Clliford 所说,将函数声明与其定义分开的真正好处是针对不同的 C/C++ 文件进行单独的编译和过程。

关于c++ - 函数原型(prototype)返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com