如果定義在調(diào)用之前,則可以不需要聲明
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了鹽邊免費(fèi)建站歡迎大家使用!
如果定義在調(diào)用之后,則要 先聲明,后調(diào)用
函數(shù)要先聲明后才能調(diào)用,聲明分為兩種如下:
先聲明后定義:
void b();
void a()
{
b();
}
void b()
{
}
聲明和定義在一個(gè)地方:
void b()
{
}
void a()
{
b(); //這樣才能滿足先聲明后調(diào)用
}
你編譯錯(cuò)誤的原因應(yīng)該是這樣:
void a()
{
b(); //此時(shí)b還沒有聲明
}
void b()
{
};
函數(shù)是用戶與程序的接口,在定義一個(gè)函數(shù)前,首先要清楚以下三個(gè)問題。1) 函數(shù)的功能實(shí)現(xiàn)及算法選擇。算法選擇會在后續(xù)文章詳細(xì)講解,本節(jié)重點(diǎn)關(guān)注函數(shù)的功能實(shí)現(xiàn)。一般選取能體現(xiàn)函數(shù)功能的函數(shù)名,且見名知意,如求和函數(shù)的函數(shù)名可取為 add,求最大值的函數(shù)名可取為 max,排序函數(shù)可取名為 sort 等。2) 需要用戶傳給該函數(shù)哪些參數(shù)、什么類型,即函數(shù)參數(shù)。3) 函數(shù)執(zhí)行完后返回給調(diào)用者的參數(shù)及類型,即函數(shù)返回值類型。 函教定義格式 函數(shù)定義的一般格式為: 返回類型 函數(shù)名 (類型參數(shù)1,類型參數(shù)2,…) {函數(shù)體 }也可以不含參數(shù),不含參數(shù)時(shí),參數(shù)表中可寫關(guān)鍵字 void 或省略,為規(guī)范起見,教程中對沒有參數(shù)的函數(shù),參數(shù)表中統(tǒng)一寫 void。例如: 類型 函數(shù)名 () {函數(shù)體 }等價(jià)于: 類型 函數(shù)名 (void) //建議的書寫方式 {函數(shù)體 } 如果該函數(shù)沒有返回類型,則為 void 類型。例如: void add (int x,int y) {printf ("sum=%d\n", x+y); } 除了 void 類型外,在函數(shù)體中,均需要顯式使用 return 語句返回對應(yīng)的表達(dá)式的值。 函教返回值 函數(shù)的值是指調(diào)用函數(shù)結(jié)束時(shí),執(zhí)行函數(shù)體所得并返回給主調(diào)函數(shù)的值。 關(guān)于函數(shù)返回值說明如下。1) 帶返回值的函數(shù),其值一般使用 return 語句返回給調(diào)用者。其格式為: return 表達(dá)式;或者 return (表達(dá)式);例如: int add (int a, int b) {return (a + b); //return 后為表達(dá)式 } 函數(shù)可以含一個(gè)或多個(gè) return 語句,但每次調(diào)用時(shí)只能執(zhí)行其中一個(gè) return 語句。例如,求整數(shù)絕對值的函數(shù): int f (int n) //含多個(gè)return語句,但每次調(diào)用只執(zhí)行一個(gè) {if (n = 0)return n;elsereturn -n; }
先回答下第一個(gè)問題,子函數(shù)的實(shí)現(xiàn)方法可以放在使用它的主函數(shù)或者其它子函數(shù)后面,但是你的定義一定要在使用它之前;不然編譯器怎么知道你用的函數(shù)square是什么,這就是我們經(jīng)常包含頭文件的一個(gè)目的,頭文件是一些函數(shù)定義或者預(yù)編譯命令。
修改是在#includestdio.h后面加
int square(int num);
第二個(gè)問題:num是在main定義是可以在main作用域內(nèi)直接使用,或者當(dāng)做參數(shù)傳遞給子函數(shù),你的問題num為什么可以在子函數(shù)中用,首先你子函數(shù)的num并非main里的num只是你把他們名字寫成一樣了;main里num是通過值傳遞給子函數(shù)的num,實(shí)際他們兩個(gè)num的內(nèi)存地址是不一樣的,你子函數(shù)換個(gè)名字去理解一下。
函數(shù)定義可以在調(diào)用之后,但是在調(diào)用前要加函數(shù)聲明
#include?iostream
using?namespace?std;
int?main()
{
int?b=2;
int?test(int?a);???//函數(shù)聲明(如果函數(shù)定義在調(diào)用后且沒有聲明,程序編譯不了)?
couttest(b);?????//函數(shù)調(diào)用
}
int?test(int?a)?????????//函數(shù)定義
{
return?a+2;?
}