【问题标题】:Are function propotypes obsolete in c++c++ 中的函数原型是否已过时
【发布时间】:2022-01-10 01:53:04
【问题描述】:

我正在看一本旧书,其中包含函数原型。例如:

#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 之后的 pbsolete 吗? 使用它们的社区准则是什么?

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

【问题讨论】:

  • 如果你删除了int square(int);,你会得到一个编译器错误。因为在cout&lt;&lt;square(x)&lt;&lt;"";@ 不知道 square
  • C++ 允许您在函数中的函数中定义函数。这真的是现在的事情吗?
  • 在链接的示例项目中,将void myFunction() { 的实现移动到int main() 之后,看看会发生什么。
  • C++ 命名法往往是“函数声明”,而不是“原型”。它们仍在使用。
  • @Someprogrammerdude - 大约每月一次,我看到有人发布一些 C++ 代码,这让我怀疑我是否真的了解这种编程语言。 :)

标签: c++ forward-declaration function-definition function-declaration function-prototypes


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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 like 之前定义函数square

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

    在这种情况下,main中的函数声明

    int square(int); //function prototype
    

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

    使用它们的社区准则是什么?

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

    在这种情况下,函数声明被放置在包含在编译单元中的头文件中,其中需要函数声明并且函数定义被放置在某个模块中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2011-06-22
      • 1970-01-01
      • 2020-10-30
      • 2013-09-19
      相关资源
      最近更新 更多