在main()之前或之后声明函数之间有什么区别?

Jes*_*nez 9 c++

有什么区别:

void function();

int main()
{......}

void function()
{......}
Run Code Online (Sandbox Code Playgroud)

VS

void function()
{.......}

int main();
Run Code Online (Sandbox Code Playgroud)

在main之前声明一个函数然后在main之后定义它然后在main之前声明并定义它似乎很奇怪.这是出于审美目的吗?我的老师写的功能就像第一个例子.

Aus*_* J. 8

注意我的意思是补充这个答案,其他人已经对这个问题给出了很好的答案。

请注意,知道如何在 C++ 中转发声明变得非常重要。一旦你开始使用头文件,它基本上就变成了强制性的。头文件将允许您构建函数和类/结构的原型,然后在相应的 .cpp 文件中定义它们。这是 C++ 的一个非常重要的组织特性。

// MyClass.h

class MyClass
{
public:
    MyClass(int x);
    void printInt();
private:
    int myInt;
};

// MyClass.cpp

MyClass::MyClass(int x)
{
    MyClass::myInt = x;
}

void MyClass::printInt()
{
    std::cout << MyClass::myInt;
}
Run Code Online (Sandbox Code Playgroud)

以这种方式做事可以使您不必完全编写一大堆代码。特别是如果您正在编写具有大量源代码的真实程序。

因此,虽然在您提出的问题中,提前声明实际上只是一种偏好,但后来它真的不会成为一种选择。


Ale*_*lec 7

这只是为了代码组织目的(我认为"美学").如果没有前向声明,则需要在使用之前编写每个函数,但是为了组织目的,您可能希望以不同的顺序编写函数体.

使用前向声明还允许您在最顶层提供文件中定义的函数列表,而无需深入了解实现.

在相互递归函数的情况下,前向声明也是必要的.考虑这个(愚蠢的)例子:

bool is_odd(int);  // neccesary

bool is_even(int x) {
  if (x == 0) {
    return true;
  } else {
    return is_odd(x - 1);
  }
}

bool is_odd(int x) {
  return is_even(x - 1);
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*dam 0

您的第一个示例采用自上而下的风格,第二个示例采用自下而上的风格。

这在很大程度上是审美问题,因为有些人更喜欢其中一种。

例如,某人可能更喜欢在获取详细信息(自上而下)之前获得程序的高级概述,而另一个人可能更喜欢首先查看详细信息(自下而上)。

自顶向下方法中的声明的一个明显好处是,您可以更轻松地重新组织函数定义,而不必担心顺序。