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

时间:2014-02-12 04:02:48

标签: c++

有什么区别:

void function();

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

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

VS

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

int main();

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

4 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:4)

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

请注意,知道如何在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;
}

以这种方式做事使得你不会完全受到大量代码的影响。特别是如果你正在编写具有相当大量源代码的真实程序。

因此,在你提出的问题中,你提出的声明实际上只是一种偏好,后来真的不会是一种选择。

答案 2 :(得分:1)

看看这个例子:

int max(int num1, int num2) 
{
   // local variable declaration
   int result;

   if (num1 > num2)
      result = num1;
   else
      result = num2;

   return result; 
}

其中,int max(int num1, int num2)表现为一种功能。

现在,我们有一个程序

#include <iostream>
using namespace std;

// function declaration
int max(int num1, int num2);

int main ()
{
   // local variable declaration:
   int a = 100;
   int b = 200;
   int ret;

   // calling a function to get max value.
   ret = max(a, b);

   cout << "Max value is : " << ret << endl;

   return 0;
}

// function returning the max between two numbers
int max(int num1, int num2) 
{
   // local variable declaration
   int result;

   if (num1 > num2)
      result = num1;
   else
      result = num2;

   return result; 
}

我将max()函数与main()函数一起保存并编译了源代码。在运行最终可执行文件时,它会产生以下结果:

Max value is : 200

调用函数:

在创建C ++函数时,您可以定义函数必须执行的操作。要使用函数,您必须调用或调用该函数。

程序调用函数时,程序控制转移到被调用函数。被调用的函数执行已定义的任务,当执行其返回语句或达到其函数结束右括号时,它将程序控制返回给主程序。

要调用函数,只需要传递必需的参数和函数名,如果函数返回一个值,那么就可以存储返回的值。

答案 3 :(得分:0)

你的第一个例子是自上而下的风格,第二个是自下而上的风格。

这在很大程度上是审美的,因为有些人比较喜欢一个人。

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

自上而下方法中声明的实际好处是,您可以更轻松地重新组织函数定义,而无需担心订购。