C 語(yǔ)言程序結(jié)構(gòu)
上一個(gè)小節(jié) C 語(yǔ)言的簡(jiǎn)介中我們對(duì) C 語(yǔ)言已經(jīng)有了一個(gè)簡(jiǎn)單的了解。這一節(jié)我們就來(lái)看一下 C 語(yǔ)言的程序結(jié)構(gòu),了解了 C 語(yǔ)言的程序結(jié)構(gòu)之后我們才能正式的開(kāi)始編寫 C 語(yǔ)言程序。下面我們來(lái)看一個(gè)最簡(jiǎn)單的 C 語(yǔ)言可執(zhí)行程序:
1. 示例程序
我們先看一個(gè)最簡(jiǎn)單的可以執(zhí)行的 C 語(yǔ)言的程序:
# include <stdio.h>
int main()
{
int x,y,z;
printf("Welcome to Utopia's lessons!\n");
return 0;
}
執(zhí)行這個(gè)程序,就會(huì)在我們的命令行中輸出如下內(nèi)容:
Welcome to Utopia's lessons!
Tips:上述程序在 gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 下通過(guò)測(cè)試可以執(zhí)行。關(guān)于 gcc 我們?cè)谙乱粋€(gè)小節(jié)會(huì)進(jìn)行講解。
2. 結(jié)構(gòu)解析
2.1 main 函數(shù)
在每個(gè) C 語(yǔ)言程序中都需要包含一個(gè) main 函數(shù)。這是程序的主體,每個(gè)可以單獨(dú)執(zhí)行的 C 語(yǔ)言程序都要有一個(gè) mian 函數(shù)作為程序的入口程序,如同每個(gè)建筑物都會(huì)有一個(gè)主要的出入口一樣。
這個(gè)函數(shù)由函數(shù)名后的一對(duì)圓括號(hào),以及在圓括號(hào)后面的一對(duì)大括號(hào),和包含在大括號(hào)內(nèi)的一組程序代碼構(gòu)成。這個(gè)圓括號(hào)中可以放置需要在程序啟動(dòng)時(shí)傳入 main 函數(shù)的參數(shù)??梢允且粋€(gè),或者多個(gè)參數(shù)。而在這之后的大括號(hào)中的部分,就是這個(gè)程序的主體部分。里面是可以執(zhí)行的程序語(yǔ)句或者注釋等相關(guān)內(nèi)容。
Tips:按照 C 語(yǔ)言的國(guó)際標(biāo)準(zhǔn),這個(gè)函數(shù)是有一個(gè)返回值的,而且類型只能是 int 類型。但是在一些舊的書籍中,會(huì)有 void 的返回類型寫法。這個(gè)寫法在我目前遇到的編譯器中不會(huì)有問(wèn)題。但是切記,這不是 C 語(yǔ)言標(biāo)準(zhǔn)寫法,在某些新的編譯器中會(huì)產(chǎn)生錯(cuò)誤。程序是一個(gè)需要極其遵守規(guī)則的領(lǐng)域,小聰明總會(huì)付出沉重的代價(jià)。
2.2 # include
指令
為了調(diào)用標(biāo)準(zhǔn) IO 庫(kù)中提供的 printf 這個(gè)函數(shù)。我們這里使用了 # include <stdio.h>
,這個(gè)語(yǔ)句代表了我們要在程序中使用 STDIO 庫(kù)中提供的函數(shù),我們也會(huì)把 stdio.h
這樣的文件稱之為頭文件。
頭文件里面主要包含著函數(shù)的聲明。這就可以方便我們重復(fù)使用別人已經(jīng)實(shí)現(xiàn)了的程序,能使用別人的,一般都不要自己來(lái)實(shí)現(xiàn),這叫做不要自己來(lái)發(fā)明輪子。更深入的講一點(diǎn),其實(shí)這個(gè)是一個(gè)預(yù)處理指令。這個(gè)指令會(huì)在程序編譯時(shí),指引編譯器找到我們所需要引用的內(nèi)容。
2.3 int x,y,z;
這一句是聲明了 3 個(gè)整數(shù)型的變量。在 C 語(yǔ)言中,變量要先通過(guò)聲明類型,然后才能使用。這一點(diǎn)和某些編程語(yǔ)言有點(diǎn)不太一樣。不同的變量類型在 C 語(yǔ)言中會(huì)對(duì)應(yīng)不同的內(nèi)存分配大小。
2.4 printf
函數(shù)
除了上面所講的部分外,其余的部分是程序語(yǔ)句。 printf
函數(shù)是向標(biāo)準(zhǔn)終端中輸出格式化的文本。 return
函數(shù)是在程序執(zhí)行到此結(jié)束程序并返回其所攜帶的參數(shù)數(shù)值。 語(yǔ)句一般是功能函數(shù)與分支結(jié)構(gòu)的組合。程序會(huì)根據(jù)條件的變化來(lái)執(zhí)行相應(yīng)的操作,最終計(jì)算出我們需要的結(jié)果。而所謂 bug 其實(shí)就是我們預(yù)想的結(jié)果和程序最終呈現(xiàn)給我們的結(jié)果不一致而已。
3. 小結(jié)
C 語(yǔ)言程序是由一個(gè)個(gè)函數(shù)組成的,其中唯一的主函數(shù)叫做 main。它是程序的入口,負(fù)責(zé)組織整個(gè)程序。
每個(gè)函數(shù)包含主函數(shù)都是由函數(shù)返回值,函數(shù)名稱,函數(shù)傳入變量,內(nèi)部的變量與常量,被調(diào)用的外部函數(shù)等組成。只不過(guò) main 函數(shù)的名稱特殊了一點(diǎn)而已。