天天看點

《C語言程式設計:問題與求解方法》——2.4節C語言源程式的次要組成成分:編譯預處理指令、注釋和聲明

本節書摘來自華章社群《c語言程式設計:問題與求解方法》一書中的第2章,第2.4節c語言源程式的次要組成成分:編譯預處理指令、注釋和聲明,作者:何 勤,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

2.4 c語言源程式的次要組成成分:編譯預處理指令、注釋和聲明

下面我們通過更為完整的例題2.2來探讨c語言源程式的其他構成成分。

【例題2.2】輸入圓球的半徑,求圓球的體積。

c語言源程式如下:

c語言源程式的次要構成成分有:編譯預處理指令、注釋和聲明(對于聲明的介紹,請參見第 7章)。其中,編譯預處理指令和注釋是不以分号結束的語言成分。

1.編譯預處理指令(例題2.2中的第6行和第7行的左邊部分)

與其他許多進階程式設計語言不同,c語言的源程式在正式運作編譯程式之前,必須事先運作一個編譯預處理程式。編譯預處理程式将根據源程式中出現的編譯預處理指令,對源程式這個文本檔案進行一些輔助性的文本插入(#include指令)、文本替換(#define指令)和文本選擇等加工工作。

每一條編譯預處理指令都是以“#”開始,并且不以分号結束。每條編譯預處理指令都必須書寫在一行上。

延伸與拓展:#include指令是頭檔案包含指令,編譯預處理程式根據這種指令,将相應頭檔案(檔案的擴充名為 .h )中的全部内容進行“複制”,然後“粘貼到”(也就是插入)源程式中頭檔案包含指令所指定的位置上。

編譯預處理指令,通常放在c語言源程式檔案的開始處。編譯預處理程式執行完畢後,源程式中所有的編譯預處理指令都不複存在,但源程式檔案的内容得到了編譯預處理程式的編輯加工。

2.注釋

注釋是以“/”開始,以“/”結束的字元序列。注釋用來說明整個程式或某段程式的功能。源程式中的注釋是給人看的,而不是給編譯程式“看”的。

注釋的常用方式有兩種:一種是注釋内容獨自占據多行,對注釋以下的一段程式或者整個源程式檔案進行說明;另一種是出現在一行語句或定義的右邊,對同一行左邊的内容進行說明解釋。這兩種類型的注釋請參見例題2.2。

編譯成機器語言程式之前,源程式中的注釋都會被編譯程式删除掉。但良好的注釋将使得源程式更易被人們讀懂,使源程式更容易了解和修改。一個源程式中往往含有精妙的程式設計思路和技巧,不加上注釋的話,半個月以後恐怕連程式的編寫者都看不懂了,這是經常發生的不幸事件。

修改源程式的語句時,一定不要忘了修改相應的注釋。否則,這段未經修改的注釋很可能使以後的程式維護者或閱讀者無所适從、深受其害。

還有一種僅僅用于單個一行的注釋。單行注釋隻需以 “//”作為開始。比如:

它的使用比較友善、不易出錯。但早期版本的一些c語言編譯器不一定支援這種注釋。

在調試程式,即查找程式有無錯誤、是否完善時,經常将一段源程式暫時變為注釋。通常在修改程式時,也常常将廢棄的程式段改變為注釋。

不要忘記書寫注釋完畢時的結束符号“/”。最好首先輸入一對“/”“/”,然後再在兩者之間插入注釋文本。兩個作為注釋的符号 和/之間不能有空格。注釋“/”和“/”不支援嵌套使用。

3.标準庫函數和庫函數調用語句

如果所有的程式設計任務都要由應用程式的編寫者來編寫,那程式設計工作量就太大了。幸好有很多通用任務的程式設計工作都已經由前輩程式員(或其他系統程式的編寫者)幫我們編寫好了,儲存在各種各樣的函數庫中。标準庫函數是指編譯程式(又稱為編譯器)附帶的一批事先編寫好了的、命名了的子程式。

在我們編寫的c語言源程式的語句中,可以調用庫函數為我們的程式做一些複雜的(然而通常是輔助性的)運算和處理工作或者輸入輸出工作。庫函數的函數調用語句為:

庫函數名(參數清單)

參數清單必須要用圓括号括起來,其中“參數清單”中的參數如果多于一個,參數之間要用逗号隔開。

比如要求出5.6的4次方是多少,就要以下述方式調用pow庫函數: pow(5.6,4);要将數值2開平方,就要調用庫函數sqrt(2)。

程式設計時調用了庫函數,這些事先編譯好了的子程式就可以通過“編譯”步驟之後的“連結”步驟,連結到你所編寫的程式之中,共同組成一個可執行的機器語言程式。

調用庫函數時不要忘記包含相應的頭檔案。c語言中的各種常用庫函數的調用方法說明,請參見附錄c。

庫函數名通常用的都是小寫英文字元構成的辨別符(參見本章後面的讨論)。

c語言中,常用的數學庫函數如表2-1所示。(注意:調用以下這些數學庫函數時,不要忘記加上頭檔案包含指令:#include 。)

《C語言程式設計:問題與求解方法》——2.4節C語言源程式的次要組成成分:編譯預處理指令、注釋和聲明

【例題2.3】編寫程式,在螢幕上顯示一行文字(即一個字元串)“hello world!”。

例題2.3隻有兩條語句:一條是格式化輸出庫函數printf()的函數調用語句。這條語句的基本的功能是:将輸出庫函數printf()中的一個調用參數—雙引号包覆的一串字元,按照原樣輸出在顯示屏上。

輸出庫函數printf()中用雙引号包覆的一串字元“hello world!n”稱為格式控制串(有時簡稱為格式串)。這是調用printf()庫函數時必須填寫的一個重要的參數。

格式控制串中末尾的兩個字元“n”不是按照原樣在顯示屏上輸出的普通字元,而隻是一個所謂的“轉義字元”(以開始的轉義字元的進一步說明請參見第3章),是以沒有顯示在螢幕上,其作用是通知輸出裝置(顯示器或列印機)換行。

另一條是傳回語句“return 0;”,這條傳回語句的作用是在main()函數運作完以後,正常傳回到作業系統。

4.c語言源程式的編輯、編譯、連結和調試過程

一個源程式從編寫、編譯到運作的整個過程簡述如下:

1)(用編輯軟體)編輯輸入源程式。一個c語言源程式編寫好了後,通常必須儲存在一個擴充名為.c的檔案中(否則,vc++ 6.0編譯器會把你的源程式當成c++源程式來進行編譯)。

2)運作預處理程式,對源程式進行編譯前的編譯預處理工作。

3)用編譯器對經過編譯預處理的源程式進行編譯工作。

4)根據編譯器給出的錯誤資訊和警告回到第1步修改程式中的文法錯誤。

5)編譯無錯誤後,生成目标檔案(檔案的擴充名為 .obj)。

6)運作連結程式,将使用者程式與庫函數的子程式段進行連結,生成可執行程式(檔案的擴充名為.exe)。

7)試運作此可執行程式,發現連結或運作時的錯誤則回到第1步進行修改。

8)結束調試過程,注意儲存并保管好無錯誤的源程式檔案(有必要的話可将其刻在CD光牒上),日後進行軟體維護時這是必需的。

注意:在vc++ 6 .0內建開發環境下,編輯、預處理、編譯、連結都在同一個操作界面上進行,第2步、第3步(如果程式沒有文法錯誤的話,還包括第5步和第6步)是一次性完成的。在不同編譯環境下,c語言源程式的編輯、編譯、連結和調試過程是有一些差別的。本書不作詳細介紹,請讀者自己查閱相關資料。

【過關測試】

c語言源程式是由一個或多個_______順序組成的。其中必須有一個______。

2.一個函數由_______和_______這兩部分組成。函數體必須以____開始,以_____結束。

c語言源程式中的每一個函數都被編譯程式翻譯成了一個機器語言的_______。

c語言源程式的函數體的主要成分是_______和________。

c語言中的語句序列被編譯程式翻譯成了_______。

c語言中的定義序列被編譯程式翻譯成了_______。

庫函數的調用方式是______。如果有多個調用參數,參數之間要用_______隔開。

c語言源程式中的_______隻是給人看的,_______是給編譯預處理程式“看”的,定義系列是給編譯程式“看”的,而語句序列則是(通過編譯程式編譯後)給_______“看”的。

9.在c源程式中,什麼成分以分号結束,什麼成分不以分号結束?什麼成分隻能書寫在一行上?

10.在例題2.2中辨別出本節所學到的各種成分。

下面我們将讨論c語言的基本文法要素。

繼續閱讀