官术网_书友最值得收藏!

3.1 程序設計語言

程序設計語言實際上就是一套規范的集合,主要包括該語言使用的字符集、直接和間接支持的數據類型集合、運算符集合、關鍵字集合、指令集合、語法規則,以及對特定構造的支持,例如,函數(過程)的定義、抽象數據類型的定義、繼承、模板、異常處理等。這些內容就是一個語言的構造或者說特征集??梢?,語法只是語言的一部分,它指導程序員如何把語言的各種構造組合起來形成一系列可以解決實際問題的可執行命令,這就是程序。一種語言對于它的各種構造的支持是通過各種關鍵字集合及其語法規則來實現的。

就拿標準C語言來說,它支持函數設計,但是語言本身并沒有提供任何現成的函數可以直接調用(你可能認為sizeof是一個函數,其實它是一個運算符)。它支持用戶定義struct、union、enum等,但是它本身并沒有提供任何具體的struct、union、enum類型供程序員使用。

有人會問,我們學習C語言的時候總是首先學習它的“格式化I/O”,以便看到自己程序的運行成果,難道“格式化I/O”不是C語言的組成部分嗎?

確實不是!

標準C語言沒有提供I/O的實現,只是定義了標準的I/O函數接口,所有的I/O工作都是通過庫函數來完成的,在這一點上它不同于BASIC。標準C++語言繼承了C的I/O庫函數接口,并且重新定義了自己的面向對象的I/O系統。

現在你該明白了,I/O系統并不是C++/C語言本身的組成部分,函數庫和類庫也不是它們的組成部分。那么為什么要提供它們呢?實際上應該說是語言實現(參見本章3.2節)按照標準接口提供了它們的一個實現版本,算是語言實現的附加產品。它們都是用語言支持的基本特征開發出來的(有的直接使用了匯編語言),目的是方便程序員進行程序設計,使他們從煩瑣的底層硬件操作中解脫出來而專注于高層的業務邏輯處理。

作為一種語言,它必須定義它能夠支持的所有合法的語法結構及其組合應用,而語言實現同樣要能夠接受所有可能的合法的代碼。但是對于面向實際應用的程序員而言,完全沒有必要學習和使用那些過于復雜的、高難度的和罕見的語法結構及其組合。就像C++之父Bjarne Stroustrup說的那樣:“你使用一個語言特征是因為你需要它,而不是因為它存在”。

學習一門程序設計語言,并不需要掌握其全部的語法,關鍵是要學習使用語言來解決實際問題的方法。例如,C語言的格式化I/O非常復雜,有不少程序員努力去記住那么多的格式控制符號,其實完全沒有必要!還有C運算符的優先級和結合率,也沒有必要把它們完全搞清楚,遇到這種問題時只需要按照自己要求的計算順序多使用“()”就可以解決。很多人在學習程序設計語言時常常沉迷于語法,這是學習的誤區!

如果記不住很多語法細節,你可以查閱手冊,但是程序設計的道理、解決實際問題的方法是沒有地方可查閱的。如果你所掌握的語法和程序設計方法能夠高效地解決實際工作中的各種問題,那么表明你已經掌握了這門語言。

主站蜘蛛池模板: 嵊州市| 弋阳县| 南平市| 利津县| 伽师县| 长泰县| 开封县| 大悟县| 阳西县| 河池市| 剑河县| 乌鲁木齐县| 孝昌县| 柘城县| 班戈县| 岗巴县| 新田县| 内黄县| 井冈山市| 固镇县| 南通市| 鄂托克前旗| 沽源县| 海阳市| 玉田县| 错那县| 汪清县| 宜兰县| 衡南县| 波密县| 江都市| 绥阳县| 嘉义县| 建德市| 曲松县| 巴林左旗| 罗江县| 大连市| 台湾省| 富裕县| 武宣县|