真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語(yǔ)言函數(shù)定義與聲明 c語(yǔ)言函數(shù)聲明與函數(shù)定義

C語(yǔ)言 函數(shù)定義 函數(shù)聲明 區(qū)別

樓主可以這樣想,C語(yǔ)言中,無(wú)論是常量,變量,函數(shù),只有先定義才能使用的。在函數(shù)定義時(shí),大腦要往一般的常量,變量定義的方向,切忌先不要想函數(shù)的別的。定義好后,把函數(shù)的定義先放一邊,不管它。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比淮陽(yáng)網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式淮陽(yáng)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋淮陽(yáng)地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

接著是函數(shù)聲明,大家都知道,C語(yǔ)言是有一個(gè)主函數(shù)main()和0或n個(gè)普通函數(shù)組成的。由于當(dāng)代碼越長(zhǎng),用到的函數(shù)就越多,為了減少函數(shù)的混淆,所以要有個(gè)函數(shù)名,就像老師點(diǎn)名一樣,聲明一個(gè)函數(shù),就如點(diǎn)一個(gè)學(xué)生的名字。

總之,函數(shù)定義是系統(tǒng)要求的,不定義就錯(cuò)誤,而函數(shù)聲明實(shí)際上不定義也行,但為了方便和減少錯(cuò)誤,人為規(guī)定要聲明。

函數(shù)聲明與函數(shù)定義分別在程序中的什么位置?為什么?

函數(shù),是編程語(yǔ)言中可以獨(dú)立運(yùn)行的一個(gè)代碼塊。

在C語(yǔ)言中,程序從main()函數(shù)開(kāi)始運(yùn)行,其他函數(shù)要被main函數(shù)調(diào)用才可以運(yùn)行。

在從shell解釋器運(yùn)行編譯好的可執(zhí)行程序時(shí),main函數(shù)會(huì)被shell啟動(dòng),開(kāi)始運(yùn)行。

C語(yǔ)言的函數(shù)在使用時(shí)要經(jīng)過(guò)3個(gè)步驟:聲明、定義、調(diào)用。

函數(shù)聲明,就是給出函數(shù)的原型,讓程序員知道怎么給函數(shù)傳參數(shù),怎么接收返回值,讓編譯器知道怎么進(jìn)行代碼的類型檢查。main函數(shù)的聲明是這樣的:

int main();

它的返回值是int類型,不需要傳參數(shù)。

printf()函數(shù)的聲明是這樣的:int printf(const char* fmt, ...);

它的返回值是int類型,第一個(gè)參數(shù)是格式字符串,之后可以跟可變參數(shù)。

函數(shù)聲明的語(yǔ)法是:

返回值類型 函數(shù)名(形參類型0 形參變量0, 形參類型1 形參變量1);

如果有多個(gè)形參,就以逗號(hào)隔開(kāi)。每個(gè)形參都有類型和變量名,其中形參變量名在聲明時(shí)可以省略。最后以分號(hào)結(jié)尾,結(jié)束聲明語(yǔ)句。

如果不想讓人看到函數(shù)的源碼,就可以只提供一個(gè)聲明和一個(gè)編譯后的文件,這樣別人就只能看匯編碼了(笑)。C語(yǔ)言的這個(gè)設(shè)計(jì),對(duì)保護(hù)知識(shí)產(chǎn)權(quán)還是有利的。

函數(shù)定義,就是在聲明之后不跟分號(hào),而是以大括號(hào)表示函數(shù)體,把函數(shù)的具體代碼寫在大括號(hào)內(nèi)部。

上圖中的main()函數(shù)就是定義,printf()函數(shù)是聲明。

定義,實(shí)現(xiàn)的是函數(shù)的內(nèi)容。函數(shù)是不能多次定義的,否則編譯器不知道采用哪個(gè)定義的代碼。

但函數(shù)可以多次聲明,只要聲明都是一樣的,不互相矛盾。

只要打了兩個(gè)大括號(hào){},就算定義了函數(shù)??諏?shí)現(xiàn)也是實(shí)現(xiàn),可以先占住這個(gè)位置,以后再填寫具體的函數(shù)代碼。即,先給出整個(gè)程序的框架來(lái),然后再填寫細(xì)節(jié)。

在實(shí)現(xiàn)了函數(shù)之后,必須去調(diào)用它,它才會(huì)運(yùn)行。

除了main函數(shù)是被shell啟動(dòng)的,其他函數(shù)都要直接或間接被main函數(shù)調(diào)用。

某一個(gè)函數(shù)在運(yùn)行時(shí),實(shí)際是存在一條從main函數(shù)到它的調(diào)用鏈的。

函數(shù)調(diào)用的語(yǔ)法是:

函數(shù)名(實(shí)參變量0, 實(shí)參變量1);

如果有多個(gè)實(shí)參,則以逗號(hào)隔開(kāi)。如果要接收函數(shù)調(diào)用的返回值,可以用一個(gè)變量去接收:

返回值變量 = 函數(shù)名(實(shí)參變量0, 實(shí)參變量1);

返回值變量的類型,要與函數(shù)的返回值類型一致,(返回值變量)在使用之前要先聲明。

對(duì)于有返回值的函數(shù),也可以不接收它的返回值。例如,printf()雖然有個(gè)int類型的返回值,用于表示打印了多少個(gè)字符,但一般不接收它。

所以C語(yǔ)言的入門代碼都是printf("hello world\n");

而不是int ret = printf("hello world\n");

函數(shù)名,在C語(yǔ)言中屬于標(biāo)志符(identity)。

標(biāo)志符的命名規(guī)則是,以下劃線或大小寫字母開(kāi)始,之后可以跟數(shù)字、字母、下劃線,(但不能跟運(yùn)算符或其他特殊符號(hào))。

它們?cè)诖a中用于表示變量名、結(jié)構(gòu)體類型名、函數(shù)名,或者給goto使用的標(biāo)號(hào)。

基本類型的類型名,都被定義為了關(guān)鍵字,不能再用作標(biāo)志符。

struct S {

int a;

int b;

} s;

S是標(biāo)志符,表示結(jié)構(gòu)體類型S。

a是標(biāo)志符,表示結(jié)構(gòu)體的成員變量a。

s是標(biāo)志符,表示變量s,它的類型是結(jié)構(gòu)體類型S。

函數(shù)名,也屬于標(biāo)志符,所以函數(shù)名也要以下劃線或大小寫字母開(kāi)始,不能是關(guān)鍵字、運(yùn)算符、或其他特殊符號(hào)。

0123,這不能做函數(shù)名,C語(yǔ)言的以0開(kāi)始的數(shù)字是八進(jìn)制數(shù)字。

0x123,也不能做函數(shù)名,以0x開(kāi)始的數(shù)字是16進(jìn)制的數(shù)字。

main,可以做函數(shù)名,這是主函數(shù),在整個(gè)程序里只能有一個(gè),不能作為普通函數(shù)的名字。

__schedule,以下劃線開(kāi)始,可以做函數(shù)名。

不過(guò),以兩個(gè)下劃線開(kāi)始的函數(shù),大多是Linux系統(tǒng)或C庫(kù)的函數(shù)。普通函數(shù)最好別這么命名。

char,這不能做函數(shù)名,它是字符類型的關(guān)鍵字。

+,這也不能,它是表示加法的運(yùn)算符。

CreateWindowEx,這可以做函數(shù)名,一看就是典型的匈牙利風(fēng)格,微軟的代碼(笑)。這個(gè)函數(shù)是windows系統(tǒng)上創(chuàng)建窗口的API。

匈牙利風(fēng)格的代碼,是從微軟開(kāi)始流行的一種風(fēng)格,函數(shù)名以一個(gè)或多個(gè)英文單詞命名,每個(gè)單詞的首字母大寫,其他字母小寫。

不過(guò)Linux的代碼(包括第三方的軟件),還是保持上古C代碼的那種下劃線風(fēng)格,全部字母小寫,單詞之間以下劃線分割,而且多使用縮寫。

有時(shí)候,縮寫之后只剩下幾個(gè)字母,就直接新組一個(gè)詞當(dāng)函數(shù)名了。

例如,Linux上啟動(dòng)新程序的函數(shù)execve(),就是個(gè)縮寫的單詞。

執(zhí)行的英文單詞叫execute,windows上的可執(zhí)行程序叫exe文件,就是這個(gè)詞的前3個(gè)字母,Linux也選了這三個(gè)字母。

cve這三個(gè)字母,來(lái)自完整的main函數(shù)的參數(shù)列表:

int main(int argc, char* argv[], char* envp);

main函數(shù)的完整聲明是上面這個(gè)樣子的,int main()這個(gè)是簡(jiǎn)化版的。

其中第一個(gè)參數(shù)argc,表示要傳給main函數(shù)的參數(shù)個(gè)數(shù)。通過(guò)命令行參數(shù)的形式傳遞。arg是參數(shù)argument的縮寫,c就是count,即參數(shù)個(gè)數(shù)。

argv,是(傳給main函數(shù)的)參數(shù)字符串的數(shù)組,v指的是vector。

envp,是環(huán)境變量的路徑,environment path。

所以,啟動(dòng)main的系統(tǒng)調(diào)用就叫作execve()了,而不叫StartProgram()。

雖然后者明顯容易理解,但它字母多啊,系統(tǒng)調(diào)用的API哪能讓人一眼就看出來(lái)是啟動(dòng)進(jìn)程的呢(汗)。

回到開(kāi)頭,main()函數(shù)在Linux上就是被execve()這個(gè)API啟動(dòng)的,然后其他函數(shù)要被main函數(shù)直接或間接調(diào)用。

不被main函數(shù)(直接或間接)調(diào)用的函數(shù),并不會(huì)運(yùn)行。

上圖的代碼只會(huì)打印add,因?yàn)閙ain只調(diào)用了add()函數(shù),沒(méi)有調(diào)用sub()函數(shù)。

這段簡(jiǎn)單的代碼,只有這三個(gè)函數(shù),sub()沒(méi)有被調(diào)用。

在C語(yǔ)言中,什么是聲明、定義、初始化?有什么區(qū)別

1.聲明和定義是針對(duì)函數(shù)的概念:

包含函數(shù)實(shí)現(xiàn)的叫做函數(shù)的定義,一般位于.c文件中,如:

int func(int a){return a+1;}

不包含函數(shù)實(shí)現(xiàn),只包含函數(shù)名的叫做函數(shù)的聲明,一般位于.h文件中。如:

int func(int a);

2.定義和初始化是針對(duì)變量的概念:

int a;就是變量的定義

a=0;就是變量的初始化


本文標(biāo)題:c語(yǔ)言函數(shù)定義與聲明 c語(yǔ)言函數(shù)聲明與函數(shù)定義
文章源于:http://weahome.cn/article/dddsjpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部