2014-02-12 87 views
7

有什麼區別:VS在main()之前或之後聲明函數有什麼區別?

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

int main(); 

這似乎很奇怪以前主要聲明函數再經過主定義它時,你可能只是聲明和之前的主定義它

void function(); 

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

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

。是否用於審美目的?我的老師寫的功能就像第一個例子。

+0

我認爲這隻適用於小樣本應用程序。這在實際應用中並不是什麼問題。 – codah

回答

0

您的第一個示例是自頂向下樣式,第二個是自下而上樣式。

它在很大程度上是美學的,因爲有些人喜歡一個在另一個。

例如,有人可能更喜歡在獲取詳細信息(自上而下)之前獲得對程序的高級概述,而另一個人可能更喜歡首先看到細節(自下而上)。

自上而下方法中聲明的一個實際好處是,您可以更輕鬆地重新組織函數定義,而無需擔心排序。

4

這只是代碼組織的目的(「美學」,我猜)。如果沒有前向聲明,你需要在每個函數使用之前編寫函數,但是爲了組織的目的,你可能需要以不同的順序編寫函數的主體。

使用正向聲明還允許您給出最頂層文件中定義的函數列表,而不必深入查看實現。

在相互遞歸函數的情況下,前向聲明也是必要的。考慮這個(傻),例如:

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

請看下面的例子:

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++函數,你給什麼樣的功能,必須做一個定義。要使用函數,您必須調用或調用該函數。

當一個程序調用一個函數時,程序控制被轉移到被調用的函數中。被調用的函數執行已定義的任務,並且在執行它的返回語句或達到其功能結束的右大括號時,它將程序控制返回到主程序。要調用一個函數,只需要將所需的參數和函數名一起傳遞,並且如果函數返回一個值,則可以存儲返回的值。

+0

我想他只是想知道在main()之前或之後放置函數的區別,但是爲努力而讚歎。 – codah

+0

所以我用簡單的例子簡單地解釋了他/他,爲什麼你有什麼疑問? –

3

注意我的意思是使這個答案補充,其他人已經給這個問題提供了很好的答案。

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

以這種方式做事情使得它不會完全束縛於做出巨大的代碼大雜燴。特別是如果你正在寫真正的程序,將有相當多的源代碼。

所以,在你提出的問題中,你提出的聲明實際上只是更多的偏好,後來它真的不會成爲一種選擇。

+0

我覺得這在某些意義上也是C中的「真實」答案。將函數聲明放在頭文件中,並將它們(作爲前向聲明)包含在使用這些函數的C代碼文件中。這遠不僅僅是審美 - 它是強制性的創建可維護的模塊化代碼。 – GreenAsJade

相關問題