有什麼區別:VS在main()之前或之後聲明函數有什麼區別?
void function()
{.......}
int main();
這似乎很奇怪以前主要聲明函數再經過主定義它時,你可能只是聲明和之前的主定義它
void function();
int main()
{......}
void function()
{......}
。是否用於審美目的?我的老師寫的功能就像第一個例子。
有什麼區別:VS在main()之前或之後聲明函數有什麼區別?
void function()
{.......}
int main();
這似乎很奇怪以前主要聲明函數再經過主定義它時,你可能只是聲明和之前的主定義它
void function();
int main()
{......}
void function()
{......}
。是否用於審美目的?我的老師寫的功能就像第一個例子。
您的第一個示例是自頂向下樣式,第二個是自下而上樣式。
它在很大程度上是美學的,因爲有些人喜歡一個在另一個。
例如,有人可能更喜歡在獲取詳細信息(自上而下)之前獲得對程序的高級概述,而另一個人可能更喜歡首先看到細節(自下而上)。
自上而下方法中聲明的一個實際好處是,您可以更輕鬆地重新組織函數定義,而無需擔心排序。
這只是代碼組織的目的(「美學」,我猜)。如果沒有前向聲明,你需要在每個函數使用之前編寫函數,但是爲了組織的目的,你可能需要以不同的順序編寫函數的主體。
使用正向聲明還允許您給出最頂層文件中定義的函數列表,而不必深入查看實現。
在相互遞歸函數的情況下,前向聲明也是必要的。考慮這個(傻),例如:
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);
}
請看下面的例子:
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++函數,你給什麼樣的功能,必須做一個定義。要使用函數,您必須調用或調用該函數。
當一個程序調用一個函數時,程序控制被轉移到被調用的函數中。被調用的函數執行已定義的任務,並且在執行它的返回語句或達到其功能結束的右大括號時,它將程序控制返回到主程序。要調用一個函數,只需要將所需的參數和函數名一起傳遞,並且如果函數返回一個值,則可以存儲返回的值。
我想他只是想知道在main()之前或之後放置函數的區別,但是爲努力而讚歎。 – codah
所以我用簡單的例子簡單地解釋了他/他,爲什麼你有什麼疑問? –
注意我的意思是使這個答案補充,其他人已經給這個問題提供了很好的答案。
請注意,知道如何在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;
}
以這種方式做事情使得它不會完全束縛於做出巨大的代碼大雜燴。特別是如果你正在寫真正的程序,將有相當多的源代碼。
所以,在你提出的問題中,你提出的聲明實際上只是更多的偏好,後來它真的不會成爲一種選擇。
我覺得這在某些意義上也是C中的「真實」答案。將函數聲明放在頭文件中,並將它們(作爲前向聲明)包含在使用這些函數的C代碼文件中。這遠不僅僅是審美 - 它是強制性的創建可維護的模塊化代碼。 – GreenAsJade
我認爲這隻適用於小樣本應用程序。這在實際應用中並不是什麼問題。 – codah