函数原型在 C++ 中是否已过时

Are function propotypes obsolete in c++

我在看一本旧书,里面有函数原型。例如:

#include<iostream>
using std::cout;
int main()
{
    int square(int); //function prototype

    for(int x = 0; x<=10; x++)
    {
        cout<<square(x)<<"";
    }

    int square(int y)
    {
        return y * y;
    }

    return 0;
}

但是,在较新的 C++ 教程中,我没有看到提到任何函数原型。在 C++98 之后它们是否已过时? 使用它们的社区准则是什么?

示例:https://www.w3schools.com/cpp/trycpp.asp?filename=demo_functions_multiple

它们并没有过时,但它们大多位于头文件中,而不是 *.cpp 文件中。

它们可能被某些 C++ 教程(例如 learncpp.com)称为“前向声明”。这是谈论它们的页面:https://www.learncpp.com/cpp-tutorial/forward-declarations/

对于像这样在另一个函数中定义一个函数的初学者

int main()
{
    //...
    int square(int y)
    {
        return y * y;
    }

    return 0;
}

不是标准的 C++ 功能。您应该在 main.

之外定义函数 square

如果你不会在for循环之前声明函数square

int square(int); //function prototype

for(int x = 0; x<=10; x++)
{
    cout<<square(x)<<"";
}

那么编译器会报错,名字square没有声明。在 C++ 中,任何名称都必须在使用前声明。

你可以在 main 之前定义函数 square like

int square(int y)
{
    return y * y;
}

int main()
{
    //...
}

在这种情况下,main

中函数的声明
int square(int); //function prototype

将是多余的,因为函数定义同时也是函数声明。

What are the community guidelines for using them?

如果没有函数说明符inline,则具有外部链接的函数只能在程序中定义一次。如果几个编译单元使用同一个函数,那么他们需要访问它的声明。

在这种情况下,函数声明放在 header 中,它包含在需要函数声明的编译单元中,函数定义放在某个模块中。