當前位置:首頁 » 編程語言 » c語言程序設計的缺點
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言程序設計的缺點

發布時間: 2022-09-01 17:41:24

A. c語言和C++各有什麼優缺點

個人覺得是很好的一篇文字,說得很清楚:

C是一個結構化語言,如譚老爺子所說:它的重點在於演算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制),而對於C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。
所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」,而就語言本身而言,在C中更多的是演算法的概念。那麼是不是C就不重要了,錯!演算法是程序設計的基礎,好的設計如果沒有好的演算法,一樣不行。而且,「C加上好的設計」也能寫出非常好的東西。
對語言本身而言,C是C++的子集,那麼是什麼樣的一個子集?從上文可以看出, C實現了C++中過程化控制及其它相關功能,而在C++中的C(我稱它為「C+」),相對於原來的C還有所加強,引入了重載、內聯函數、異常處理等等玩藝兒,C++更是拓展了面向對象設計的內容,如類、繼承、虛函數、模板和包容器類等等。
再提高一點,在C++中,數據封裝、類型這些東東已不是什麼新鮮事了,需要考慮的是諸如:對象粒度的選擇、對象介面的設計和繼承、組合與繼承的使用等等問題。
所以相對於C,C++包含了更豐富的「設計」的概念,但C是C++的一個自洽子集,也具有強大的功能,同樣值得學習。

幾點學習建議:
1.基本概念很重要。無論學C,還是學C++,基本概念都是第一位的,也是比較困難的,但只有把握了基本概念才能把握整體脈絡,才能居高臨下。
2.C是C++的子集,它的基本概念和設計方法相對比較容易理解,初學者可從它入手。
3.如果要學好C++,建議初學者最好別在如VC,BCB平台下寫程序,那種自動化的代碼生成,花花綠綠的界面,會讓你手足無措。最好先找一片空地(unix,dos),從頭做起,寫幾個大點的程序,數個回合,再到VC,BCB下看看,你會輕松得很。在我看來,學好C/C++是成為VC,BCB高手的必由之路。
4.不要妄想速成,必須得一個byte,一個bit的去摳,盡量搞清楚每一個問題。
5.幾本好書:
機械工業出版社的那套「計算機科學叢書」從C到C++,到面向對象設計,一應俱全,都TMD是經典中的經典,而且價格公道,童叟無欺。
國內也有幾本好書,譚老爺子的書好倒是好,就是程序錯誤太多。強烈推薦清華周之英的《現代軟體工程》(上、中、下),它是我所見到的國內少有的一本好書,精華的精華,要點的要點,細細品來,至少也屬降龍十八掌等級的東東。

如果還是有人想學習C/C++的話, 有一些小問題我還是樂意解答的. 但是我認為學習C/C++是不重要的, 重要的是如何鍛煉你的思路. 不要找一些連自己都搞不清的問題去做.

我認為雖然 "潭浩強" 同志有騙錢的嫌疑( 我手頭就有一本幾乎一模一樣的英文書 ), 但是, 是他把這本入門手冊引入中國, 使無數程序員了解了C語言, 我想他的功勞也是不可磨滅的. 在< C語言程序設計 >這本書中所有的例子都可以用做鍛煉思路的基石, 他對大家的編程是很有幫助的. 我認為是值得一買的. 去思考課後的例子對你的編程很有幫助. 不要小看一個一個簡單的例子, 他們是你通往成功的道路.

當你基本能夠掌握了上一本書中例子後, 你就要自己找一些例子程序去看. 開始可能是看不懂, 但是只要努力就沒有什麼問題. 當你看過幾個較大的例子之後, 你會茅塞頓開, ( 大量閱讀例子程序是學習C/C++的捷徑 ). 你會發現, 你的水平有了顯著的提高. 你看的例子越多, 你對 Windows/DOS 了解的越多. 最好能夠再看一些關於系統知識的書籍. 他會對你的編程很有幫助的.

這是我學習C/C++的一點心得, 希望對沒有被我嚇到而要繼續學習C/C++的朋友們有一些幫助. 免得有些同志說我破壞中國軟體人才的發展.

在最後我祝願所有堅持學習C/C++的朋友們成功! 同時感謝閱讀過我文章的同志們.

想學好C++,非學C不可!!!

今天我這么肯定的在這里講這番話,是不想初學者陷入到語言越新越好的誤區,本來這個題目就不是很嚴謹,但是我有幾句話必須講講,為C平反!!

C++與C有什麼不同呢?我們現在一步步地來分析一下
一、類,類我並不說它有什麼不好,但是對於初學者,它是一個累贅。類的封裝使得初學者對程序產生厭倦,感到不適和麻煩。
二、引用,引用是C++中最臭屁的東西了,最好盡量不要用它,我就是從來不用引用,除非萬不得已。引用對於初學者就更容易產生混淆,不知道哪個是引用,哪個是變數。
三、函數的重載,初學者學函數的重載好像沒什麼壞處,但是,這會使初學者潛意識里對C語言的變數類型的重要性產生淡化,要記住C語言是對變數類型最敏感了的,變數的類型在C語言里的重要性是不言而喻的。
四、流操作符,和上面同樣的道理,使得對變數類型的重要性產生淡化,況且,cin這個東東有點兒不怎麼方便,有時會產生使初學者莫名其妙的結果。
五、操作符重載,典型的高級應用,初學者可能根本用不著,這個東東會讓他們覺得C++很難,門檻高,看不懂…………。
六、繼承,以及虛函數,典型的模仿四不象,這種狗屁東西除了看起來深奧,實用價值很低………………。我怎麼可能把某個類的類型的指針去指向另一個不同類型但是是繼承關系的類,來實現什麼動態聯編,暈…………
………………還有些東東我就不發表評論了,如:new,delete操作符等…………

七、誤區:以問答形式:
問:C++是面向對象化的而C是面向過程化的?
答:第二對,第一問錯,C++並非完全面向對象化,真正的面向對象化的語言恐怕只有Java才算得上。
問:C++能實現C所不能的功能嗎?
答:至少我還沒有發現……
問:學了C再學C++有障礙嗎?比如程序設計思想……
答:至少我還沒有看見誰有此症狀。
問:學了C再學C++又要重頭開始嗎?
答:不,C++下可以實現C語言的一切功能。
問:我學完了C一定還要學C++才能編程嗎?
答:完全沒必要。
問:C++比C好在哪裡?
答:更加符合軟體工程學
問:學完了C再學C++是不是很容易?
答:那要看你是不是真正的學完了C語言,我從C到C++就一個星期的睡覺前的時間看兩眼書,然後就大徹大悟。再跑到這里來發表些狗屁文章了。

最近在網上看到了很多人的學習方法,本人非常不贊同。很多人都想一口吃個胖子,要學就想學最新的,好象沒有人願意再去學那些老的,舊的編程語言了。但你們能學的懂嗎?不學TC2。0等那些較早的優秀編程語言,你們能理解的了VC6。0?如果你真的能,我寧願做你的徒弟!真是奇怪,那些最基本的語言都不懂的人,怎麼可能去理解那些最新的編程語言?我學編程有三年了吧。成績也不算多,只有一個計算機四級證和一個高程證,但我覺得我在學VC的時候還有很多的不明白的地方。沒有人來教我,只能靠我自己,包括所有的成績在內,我都是靠自己,我從不報班。學VC的半年多來,我想我已經基本入門,但依然有很多的困惑。剛開始學VC,就面臨一個項目,我真的猶如笨蛋一般,四處嚇摸,毫無頭緒,最後勉勉強強才算做個差不多。學好VC再去學其他的高級WINDOWS編程,我想那真是輕而易舉,畢竟WINDOWS的內部的很多東西都能直接被VC調用,你首先就可以對WINDOWS有個全新的認識,再去學其他的語言豈能不簡單?

我的感覺是,面向過程和面向對象,其實都很重要的,在VC里也依然需要面向過程,很多東西都是一環扣一環,沒有面向過程的思想,怎麼可能去編程呢?建議多去看看有關WINDOWS編程的書,但多數都是比較老的書呦!我依然記得當年整天進行TC編程的辛苦,但我依然很懷念當年的勞動付出,畢竟我獲得了我想獲得的一切——編程思想。我覺得一個好的編程思想,絕對比你去學一門計算機語言好重要的多。要形成自己的編程風格。一個好的編程思想在你的頭腦中一旦形成,學習什麼語言都會很輕而易舉,因為此時的你不在是簡簡單單的學習,而是來驗證!

B. C語言程序設計

C語言是一種計算機程序設計語言。它既有高級語言的特點,又具有匯編語言的特點。它可以作為系統設計語言,編寫工作系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。因此,它的應用范圍廣泛。
主要特點編輯

1. C語言是高級語言。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。
2.C語言是結構式語言。結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。
3.C語言功能齊全。具有各種各樣的數據類型,並引入了指針概念,可使程序效率更高。而且計算功能、邏輯判斷功能也比較強大。
4. C語言適用范圍大。適合於多種操作系統,如Windows、DOS、UNIX、LINUX等等;也適用於多種機型。 C語言對編寫需要硬體進行操作的場合,明顯優於其它高級語言,有一些大型應用軟體也是用C語言編寫的。

常用c語言編譯器編輯
有Microsoft Visual C++,Borland C++,WatcomC++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,WatcomC++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,Microsoft C,High C,Turbo C,Dev-C++,C-Free,win-tc 等等......

發展過程編輯
C語言的原型ALGOL 60語言(也稱為A語言) 。
1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。
1967年,劍橋大學的Matin Richards 對CPL語言進行了簡化,於是產生了BCPL語言。
1970年,美國貝爾實驗室的Ken Thompson將BCPL進行了修改,並為它起了一個有趣的名字「B語言」。意思是將CPL語言煮干,提煉出它的精華。並且他用B語言寫了第一個UNIX操作系統。
而在1973年,B語言也給人「煮」了一下,美國貝爾實驗室的D.M.RITCHIE在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
為了使UNIX操作系統推廣,1977年Dennis M.Ritchie發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,從而使C語言成為目前世界上流行最廣泛的高級程序設計語言。
1987年,隨著微型計算機的日益普及,出現了許多C語言版本。由於沒有統一的標准,使得這些C語言之間出現了一些不一致的地方。為了改變這種情況,美國國家標准研究所(ANSI)為C語言制定了一套ANSI標准, 成為現行的C語言標准 3.C語言的主要特點 ,即經典的87 ANSI C。C語言發展迅速, 而且成為最受歡迎的語言之一,主要因為它具有強大的功能。許多著名的系統軟體, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C語言編寫的。用C語言加上一些匯編語言子程序, 就更能顯示C語言的優勢了,象PC- DOS 、WORDSTAR等就是用這種方法編寫的。
1990年,國際化標准組織ISO(Intrernational StandardOrganization)接受了87 ANSI C為ISO C的標准(ISO9899-1990)。1994年,ISO修訂了C語言的標准。目前流行的C語言編譯系統大多是以ANSI C為基礎進行開發的,但不同版本的C編譯系統所實現的語言功能和語法規則略有差別。

相關特點編輯

概述
C語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護。C語言的表現能力和處理能力極強。它不僅具有豐富的運算符和數據類型,便於實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。

詳細介紹

優點
1、簡潔緊湊、靈活方便
C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。
2、運算符豐富
C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。
3、數據類型豐富
C語言的數據類型有:整型、實型、字元型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。 同時對於不同的編譯器也有各種
4、C是結構式語言
結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。
5、語法限制不太嚴格,程序設計自由度大
雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。
6、允許直接訪問物理地址,對硬體進行操作
由於C語言允許直接訪問物理地址,可以直接對硬體進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟體。
7、生成目標代碼質量高,程序執行效率高
一般只比匯編程序生成的目標代碼效率低10へ20%。
8、適用范圍大,可移植性好
C語言有一個突出的優點就是適合於多種操作系統,如DOS、UNIX、windows 98.windows NT;也適用於多種機型。C語言具有強大的繪圖能力,可移植性好,並具備很強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫,它也是數值計算的高級語言。

缺點
1. C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。
2. C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。

C. c語言程序設計的相關特點

1、簡潔緊湊、靈活方便
C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。
2、運算符豐富
C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。
3、數據類型豐富
C語言的數據類型有:整型、實型、字元型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。 同時對於不同的編譯器也有各種
4、C是結構式語言
結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。
5、語法限制不太嚴格,程序設計自由度大
雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。
6、允許直接訪問物理地址,對硬體進行操作
由於C語言允許直接訪問物理地址,可以直接對硬體進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟體。
7、生成目標代碼質量高,程序執行效率高
一般只比匯編程序生成的目標代碼效率低10へ20%。
8、適用范圍大,可移植性好
C語言有一個突出的優點就是適合於多種操作系統,如DOS、UNIX、windows 98.windows NT;也適用於多種機型。C語言具有強大的繪圖能力,可移植性好,並具備很強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫,它也是數值計算的高級語言。 1. C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。
2. C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。

D. 譚浩強的《C語言程序設計》一書有何缺點

什麼書都有缺點的,現在關注的不是他的缺點,能讓你很好的學習到知識 就好

E. C語言跟其他編程語言有什麼不同,各有什麼優缺點

C語言跟別的語言比 是最基礎的,學單片機就是要先好C語言,C語言|優缺點&結構特點 優點1. 簡潔緊湊、靈活方便C語言一共只有32個關鍵字,9種控制語句,程序書寫形式自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。 C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。 2. 運算符豐富 C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。 3. 數據結構豐富 C語言的數據類型有:整型、實型、字元型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種復雜的數據結構的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。 4. C是結構式語言 結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。 5. C語法限制不太嚴格,程序設計自由度大 雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。 6. C語言允許直接訪問物理地址,可以直接對硬體進行操作 由於C語言允許直接訪問物理地址,可以直接對硬體進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟體。 7. 生成目標代碼質量高,程序執行效率高 一般只比匯編程序生成的目標代碼效率低10へ20%。 8. C語言適用范圍大,可移植性好 C語言有一個突出的優點就是適合於多種操作系統,如DOS、UNIX;也適用於多種機型。C語言具有強大的繪圖能力,可移植性好,並具備很強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫,它也是數值計算的高級語言。 缺點1. C語言的缺點主要表現在數據的封裝性上,這一點使得C在數據的安全性上有很大缺陷,這也是C和C++的一大區別。 2. C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。從應用的角度,C語言比其他高級語言較難掌握。 [C語言指針] 指針是C語言的一大特色,可以說是C語言優於其它高級語言的一個重要原因。就是因為它有指針,可以直接進行靠近硬體的操作,但是C的指針操作也給它帶來了很多不安全的因素。C++在這方面做了很好的改進,在保留了指針操作的同時又增強了安全性。Java取消了指針操作,提高了安全性,適合初學者使用。 結構特點1.一個C語言源程序可以由一個或多個源文件組成。 2.每個源文件可由一個或多個函數組成。 3.一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。 4.源程序中可以有預處理命令(include 命令僅為其中的一種),預處理命令通常應放在源文件或源程序的最前面。 5.每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括弧「}」之後不能加分號。 6.標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。 願對你有所有幫助

F. 譚浩強的(C語言程序設計)這本書的缺陷

太膚淺,講解不透徹,沒有講出好多實際的寫法

G. C、Java、Pascal這三種編程語言的優缺點

c是面向過程的,c++和java是面向對象的,java應用領域很廣,c++是c的後繼,c++比較適合做大型項目軟體。
C比較貼近硬體,對內存可以直接控制,可以編寫接近底層的程序。但是,C有個明顯的不足,就是處理的問題數據結構復雜時,容易出錯。C++地面向對象技術可以解決這個不足,但用這種技術會帶來程序執行效率的降低。
pascal語法比較簡單,比較容易學,但是網上資料比較少。
你可以查一下編程語言排行榜
不過個人覺得c++較強大

H. 譚浩強《C語言程序設計》一書有何缺點

書上面ANSI只給了兩種方式:
int main(void) {/*...*/}和 int main(int argc, char *argv[]){/*...*/}
其它的形式都是不標準的,屬未定義行為。

老譚雖然水平不高,但是在中國計算機教育的早期他的確作出了不少貢獻。因為那時全國上下懂計算機的人很少、總體水平極低,所以以老譚之碌碌,仍能對大夥有所幫助。

但是人貴有自知之明:你的時代已經過去了,你就應該知趣地退在一邊看年輕人的表演。這方面王選先生就很值得學習。

王先生自已說過:在90年代初的時候他就深切地體會到自己對新技術的學習和掌握已經趕不上身邊的年輕人了,所以他自覺退出科研一線,讓有能力和活力的年輕學者挑大樑。

反觀譚先生,不但隔個一年半載的就要把他那泛黃的書稿拿出來撣撣灰、改幾個字,然後找家出版社出版。

而且,他老先生還成立了一個所謂「譚浩強工作室」,組織一夥寫手寫了一批同樣的碌碌之作——其中某些書涉及的領域,相信譚先生自己恐怕知之甚少。

以王選先生之學識和名望,尚知其力有不逮。老譚,你為什麼不慚愧?

I. 昆明北大青鳥分享C語言編程技術的優勢和劣勢

隨著互聯網編程技術的不斷發展,現在大多數的軟體開發都是通過編程語言來實現的,今天我們就一起來了解一下C語言編程開發技術都有哪些優勢和劣勢。



C語言的一些好的體驗


一次通過閱讀POV-Ray源代碼學會如何在C語言中實現面向對象編程。


通過閱讀GTK+源代碼了解C語言代碼的清晰、干凈和可維護性。


通過閱讀SIOD和Guile的源代碼,知道如何使用C語言實現Scheme解析器。


使用C語言寫出GNOME Eye的初始版本,並對MicroTile渲染進行調優。


C語言的一些不好的體驗


在Evolution團隊時,很多東西老是崩潰。那個時候還沒有Valgrind,為了得到Purify這個軟體,需要購買一台Solaris機器。


調試gnome-vfs線程死鎖問題。


調試Mesa,卻無果。


接手Nautilus-share的初始版本,卻發現代碼裡面居然沒有使用free()。


想要重構代碼,卻不知道該如何管理好內存。


想要打包代碼,卻發現到處是全局變數,而且沒有靜態函數。


但不管怎樣,還是來說說那些Rust里有但C語言里沒有的東西吧。


自動資源管理


Rust從C++那裡借鑒了一些想法,如RAII(Resource Acquisition Is Initialization,資源獲取即初始化)和智能指針,並加入了值的單一所有權原則,還提供了自動化的決策性資源管理機制。


自動化:不需要手動調用free()。內存使用完後會自動釋放,文件使用完後會自動關閉,互斥鎖在作用域之外會自動釋放。如果要封裝外部資源,基本上只要實現Drop這個trait就可以了。封裝過的資源就像是編程語言的一部分,因為你不需要去管理它的生命周期。


決策性:資源被創建(內存分配、初始化、打開文件等),然後在作用域之外被銷毀。根本不存在垃圾收集這回事:代碼執行完就都結束了。程序數據的生命周期看起來就像是函數調用樹。


如果在寫代碼時老是忘記調用這些方法(free/close/destroy),或者發現以前寫的代碼已經忘記調用,甚至錯誤地調用,那麼以後我再也不想使用這些方法了。


泛型


Vec真的就是元素T的vector,而不只是對象指針的數組。在經過編譯之後,它只能用來存放類型T的對象。


在C語言里需要些很多代碼才能實現類似的功能,所以我不想再這么幹了。


trait不只是interface


Rust並不是一門類似那樣的面向對象編程語言,它有trait,看起來就像是里的interface——可以用來實現動態綁定。如果一個對象實現了Drawable,那麼就可以肯定該對象帶有draw()方法。


不過不管怎樣,trait的威力可不止這些。


依賴管理


以前實現依賴管理需要:


手動調用或通過自動化工具宏來調用g-config。


指定頭文件和庫文件路徑。


基本上需要人為確保安裝了正確版本的庫文件。


而在Rust里,只需要編寫一個Cargo.toml文件,然後在文件里指明依賴庫的版本。這些依賴庫會被自動下載下來,或者從某個指定的地方獲取。


測試


C語言的單元測試非常困難,原因如下:


內部函數通常都是靜態的。也就是說,它們無法被外部文件調用。測試程序需要使用#include指令把源文件包含進來,或者使用#ifdefs在測試過程中移除這些靜態函數。


需要編寫Makefile文件將測試程序鏈接到其中的部分依賴庫或部分代碼。


需要使用測試框架,並把測試用例注冊到框架上,還要學會如何使用這些框架。


衛生宏(Hygienic Macro)


Rust的衛生宏避免了C語言宏可能存在的問題,比如宏中的一些東西會掩蓋掉代碼里的標識符。Rust並不要求宏中所有的符號都必須使用括弧,比如max(5 + 3, 4)。


沒有自動轉型


在C語言里,昆明北大青鳥http://www.kmbdqn.com/發現很多bug都是因為在無意中將int轉成short或char而導致,而在Rust里就不會出現這種情況,因為它要求顯示轉型。


不會出現整型溢出


這個就不用再多作解釋了。


J. 譚浩強 C語言程序設計 一書有何缺點

首先這本書可以讓你快速的入門,這一點是相當強大的!!!!!!!
缺點嘛,比如和經典的《C Primer》對比一下,
《C Primer》一書相當詳細,語法全部是標准C,而譚Sir的書課程推進的很快;
就像 int main(),《C Primer》里詳細介紹了int、main、()以及為什麼()里是空的,而譚Sir的書簡略很多;
再比如,譚Sir的書會教你怎樣把程序寫對,而《C Primer》還會告訴你這個程序是如何在操作系統里運行的,這個程序要正確的運行需要系統給予那些支持,甚至涉及到哪些硬體

個人建議,先看看譚Sir的書簡單入個門,然後看《C Primer》加深了解開闊眼界