C語言編寫程序的優點和缺點以及與C++的區別

C語言編寫程序的優點有哪些?

問題闡述

C語言能夠存在並發展至今,其生命力之強可見一斑。這其中一定是有着某些不可替代的優點,那麼C語言編寫程序的優點都有哪些呢?

專家解答

爲了方便讀者理解,下面對C語言的每條特點進行詳細的解說。

(1)程序結構簡潔、緊湊、規整,表達式簡練、使用靈活。

(2)編寫的程序可讀性強,編譯效率高。

(3)具有豐富的運算符,多達34種。豐富的數據類型與豐富的運算符相結合,使C語言具有表達靈活和效率高等特點。

(4)數據類型種類繁多。C語言具有5種基本的數據類型和多種構造數據類型以及複合的導出類型,同時還提供了與地址密切相關的指針機器運算符。指針可以指向各種類型的簡單變量、數組、結構和聯合,乃至函數等。此外,C語言還允許用戶自己定義數據類型。

(5)是一種結構化程序設計語言,特別適合大型程序的模塊化設計。C語言具有編寫結構化程序所必需的基本流程控制語句,C語言程序是由函數集合構成的,函數各自獨立,並且作爲模塊化設計的基本單位。

說明:

C語言的源文件,可以分割成多個源程序,分別進行編譯,然後連接起來構成可知性的目標文件,爲開發大型軟件提供了極大的方便。C語言還提供了多種存儲屬性,使數據可以按其需要在相應的作用域起作用,從而提高了程序的可靠性。

(6)語法限制不太嚴格,程序設計自由度大。例如,對數組下標越界不作檢查,由程序編寫者自己保證程序的正確。一般的高級語言語法檢查比較嚴,能檢測出幾乎所有的語法錯誤,而C語言允許程序編寫者有較大的自由度,因此放寬了語法的檢查。程序員應當仔細檢查程序,保證其正確,而不要過分依賴C語言編譯程序去查錯。

(7)允許直接訪問物理地址,能進行位(bit)操作,能實現彙編語言的大部分功能,可以直接對硬件進行操作。因此,C語言既具有高級語言的功能,又兼容低級語言的許多功能,可用來編寫系統軟件。

(8)生成的目標代碼質量高,程序執行效率高。它一般只比彙編程序生成的目標代碼率低10%~20%。

(9)具有較高的可移植性。它的語句基本上無須修改就能用於各種型號的計算機和各種操作系統。

C語言是處於彙編語言和高級語言之間的一種中間型程序設計語言,常被稱爲中級語言。它既有高級語言的基本特點,又具有彙編語言面向硬件和系統,可以直接訪問硬件的功能。

專家點評

C語言的這些優點,讀者僅通過這裏的介紹還不能深刻理解和體會,待對C語言有了一定的瞭解之後再回顧一下,就會體會到這些優點了。但由於C語言的限制少、靈活性大、功能強,所以對程序員有較高的要求。在使用C語言進行編程時,需要有足夠的細心和耐心。



如何規避C語言的不足之處?

問題闡述

C語言雖然具有功能強、靈活性大、可移植性強、應用廣泛等優點,但是同時也存在着一定的缺點,導致在學習和編程時造成一定的困難和錯誤。那麼在編程時應該如何規避C語言的不足之處呢?

專家解答

C語言是一門非常流行的編程語言,被許多平臺選用,具有許多的優點。然而,正如人們常說的"事物都具有矛盾性",有利必有弊,在看到其種種優點之時,千萬不要忽視其存在的不足和缺陷。下面的分析不是爲了打擊大家學習C語言的積極性,而是爲了使大家更好地瞭解和學習C語言。

(1)C語言語法限制不太嚴格,程序設計自由度大。"限制"與"靈活"是對立的,強調"靈活"就會放鬆"限制"。這就對使用C語言進行編程提出了更高的要求,程序員要對程序設計更熟悉。例如,C語言對數組下標越界不檢查,容易造成數據在內存中的混亂。

(2)C語言具有豐富的運算符,多達34種。豐富的數據類型與豐富的運算符相結合,使C語言具有表達靈活和效率高等特點。然而,這卻增加了使用C語言的難度,這些運算符分爲衆多優先級,不容易記憶,可能混淆而產生錯誤。

(3)C語言存在着一些不應該存在的語法限制。例如,switch語句由case結構組成,每個case結束之後都要使用一個break來跳出case結構,否則將會繼續執行下面的case,這樣就會造成錯誤。

(4)C語言中許多運算符被"重載",具有不同的意義,甚至有些關鍵字也具有好幾種意義。例如,void作爲函數的返回類型,表示不返回任何值;在指針聲明中,表示通用指針類型;在參數列表中,表示沒有參數。

專家點評

儘管C語言存在着諸多不足,但無法掩蓋它的優勢,當今的許多軟件仍在使用C語言進行開發。大家需要經過長時間的開發積累,記住C語言的這些特點,才能更靈活地應用C語言進行開發。


C語言是C++的子集嗎?

問題闡述

C語言是C++的子集嗎?C++是在C語言的基礎上擴展而來幷包含所有C語言的內容嗎?

專家解答

從實用角度講,C++屬於C語言的一個超集,基本上兼容ANSI C。但是從編譯角度上講,C語言的有些特性在C++中並不支持。相反,ANSI C繼承了C++的幾個特性,包括原型和常量。因此,這兩種語言並不是另一個的超集或子集;而且它們在一些通用構造的定義上也不同。儘管有這些不同,許多C程序在C++環境中仍能編譯,而且許多最新的編譯器同時提供C和C++的編譯模式。但是,不要把C代碼完全當做C++代碼來編譯,否則在遇到不兼容問題時會給程序帶來錯誤。

C++對C語言的改進如下。

C++對數組定義進行了限制。在C語言中,初始化數組時不作數組溢出判斷,這樣就容易使數組沒有足夠大的空間存放數據而產生錯誤。C++對此作了一些改進,像char str[3]="Jim"這樣的表達式就被認爲是一個錯誤,但是它在C語言中是合法的。

在C++中,聲明語句可以穿插於語句之間。大家知道,在C語言中,一個語句塊中的所有聲明必須都放在所有語句的前面,而C++去掉了這個限制,使聲明語句可以穿插於語句之間。

C++對C語言的改進最主要表現在對面向對象的擴充上。C語言是一種面向過程的結構化的語言,而C++是面向對象的語言,它在C語言的基礎上增加了面向對象的機制,使得C++比C語言更加完善和實用。

C++中存在而C語言中不存在的限制。

在C++中,用戶代碼不能夠調用主函數main()函數,但是在C語言中這是可以的(但是極少出現這種情況)。

C++中對函數原型的聲明是嚴格的,要求必須完整,而在C語言中卻沒有這麼嚴格。

在C++中,由typedef定義的類型的名字不能與已有的結構名稱衝突,但在C語言中卻是允許的。

C++規定了更嚴格的類型處理,例如,當void*指針賦值給另一個類型的指針時,C++要求必須進行強制類型轉換,而在C語言中則無需這麼做。

C++與C語言中含義不同的特性:

C++對C語言的關鍵字進行了擴充,增加了至少十幾個。這些關鍵字在C語言中可以作爲標識符使用,但是如果這樣的C語言代碼使用C++編譯器進行編譯,就會產生錯誤信息。

在C++中,內層作用域的結構名稱將會隱藏外層空間中相同的對象名,在C語言中則不會這樣。

在C++中,註釋可以使用"//"註釋符,而在C語言中則不能使用。

專家點評

從總體上說,C語言是C++的前身,上面只介紹了它們的一部分不同之處。從上面的介紹可以看出,C++並沒有對C語言存在的一些最基本的問題進行改進,它仍然保留了C語言的許多缺陷,而且在此基礎上又堆積了大量複雜的東西。不過儘管存在着不少缺陷,C語言和C++都被廣泛地使用着,這也說明了其存在的價值。

C和C++的不同之處還有很多,大家要通過實際編程來分析兩者的差異,並保持警惕,避免相互使用時出現錯誤。


轉自http://book.51cto.com/art/201203/326387.htm
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章