經(jīng)典的 Hello, World!
學(xué)習(xí)一門程序設(shè)計(jì)語言的惟一途徑就是使用它編寫程序,但是如果一開始就面對一個復(fù)雜的程序,并詳盡的介紹語言的方方面面,將會涉及到許多細(xì)節(jié)方面的知識,這樣很難對語言自身形成一個完整的概念性理解。我們遵循古老的傳說,從經(jīng)典的 Hello, World! 起步,逐行講解程序,以便我們對C語言有個整體印象。
創(chuàng)建項(xiàng)目
我們建立一個名為 HelloWorld 的項(xiàng)目,并輸入以下代碼。
程序剖析
這行以 # 號開頭的文本叫預(yù)處理指令,這里使用 #include 指令,包含一個名為 stdio.h 的頭文件。頭文件好比一張說明書,程序編譯時,編譯器可以從它當(dāng)中查詢或引用所需要的信息。在這里,stdio.h為后面使用的printf函數(shù)提供了相關(guān)信息。
這行代碼引入一個名為 main 的函數(shù)。int 表示函數(shù)返回一個整數(shù)值,返回值通常用于指示函數(shù)執(zhí)行任務(wù)后的狀態(tài); void 表示main函數(shù)不接受任何參數(shù)。
函數(shù)是C程序的基本模塊。對應(yīng)于生活,函數(shù)可以理解為用于完成某個具體任務(wù)的活動。假如我們正在和朋友聚會,你想要分享你的餅干烘培手藝,那么與編程中的函數(shù)可以如下類比:
烘培餅干是主旨,這可以理解為函數(shù)的名稱,如這里的main。
我們需要一些模具,借助它們可以做出樣式各異的餅干來,這里模具可以理解為函數(shù)的參數(shù)。
使用模具做出了多種外觀的餅干,對應(yīng)到函數(shù)就是使用這些參數(shù)進(jìn)行運(yùn)算得到了所需的結(jié)果。
烘培完成后你為大家送上了美味,這個通知是一種狀態(tài)反饋,相當(dāng)于函數(shù)返回值。

在C語言中,main是一個特殊的函數(shù)名,每個C程序都從main函數(shù)的起點(diǎn)開始執(zhí)行,這意味著每個程序都必須在某個位置包含一個且僅一個main函數(shù)。

接下來是一個左花括號號,表示main函數(shù)體代碼的開始。
跳過中間的部分,一直到右大括號,這表示函數(shù)體的結(jié)束。
以雙斜杠開頭的行被稱為注釋,用于對代碼起注解作用,注釋不是有效的代碼。
雙斜杠注釋的范圍是當(dāng)前行;即在當(dāng)前行,從 // 之后的文本都被看作為注釋。
這是main函數(shù)中的第一條語句。printf是一個函數(shù),它相關(guān)的說明信息包含在stdio.h頭文件中,這就是程序一開始使用#include指令包含它的原因。printf函數(shù)接受一個由雙引號括起來的字符串作為其參數(shù),并將這個字符串打印到屏幕上。這里的打印不是指打印到打印機(jī),而是指輸出到屏幕上。在代碼的末尾,有一個分號(;),在C語言中,分號代表一條語句的結(jié)束。
表示main函數(shù)運(yùn)行完成。返回一個0值,代表函數(shù)執(zhí)行期間沒有發(fā)生任何錯誤。最后的右大括號處,表示函數(shù)體結(jié)束。由于main函數(shù)是C程序的主函數(shù),主函數(shù)體結(jié)束后,程序自然也就退出了。
運(yùn)行程序
現(xiàn)在嘗試編譯并運(yùn)行一下程序,如果這期間沒有發(fā)生任何輸入錯誤,則可以在屏幕上看到 Hello, World! 這行文本,同時你也會發(fā)現(xiàn),注釋并沒有被輸出到屏幕上。注意:如圖所示的后兩行輸出,是開發(fā)環(huán)境給程序添加的,實(shí)際運(yùn)行時它們并不會存在。

習(xí)題
修改程序,在頭文件包含指令后面加入注釋,指明它為哪個函數(shù)服務(wù)。
注釋掉#incldue指令行,觀察編譯過程。
將 int main(void)放在#include <stdio.h>后面,譯程序觀察結(jié)果。
去掉任何一個語句的結(jié)束符,編譯程序觀察結(jié)果。