標籤: 暫無標籤

C語言是一種計算機程序設計語言。它既具有高級語言的特點,又具有彙編語言的特點。它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。

1 c語言 -簡介

c語言c語言

C語言,是一種通用的、過程式的編程語言,廣泛用於系統與應用軟體的開發。具有高效、靈活、功能豐富、表達力強和較高的移植性等特點,在程序員中備受青睞。

C語言是由UNIX的研製者丹尼斯·里奇(Dennis Ritchie)於1970年 由肯·湯普遜(Ken Thompson)所研製出的B語言的基礎上發展和完善起來的。目前,C語言編譯器普遍存在於各種不同的操作系統中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言的設計影響了許多後來的編程語言,例如C++、Objective-C、Java、C#等。

1980年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標準局(American National Standard Institution)為C語言訂定了一套完整的國際標準語法,稱為ANSI C,作為C語言的標準。1980年代至今的有關程式開發工具,一般都支持符合ANSI C的語法。

2 c語言 -設計目標

C語言是一個程序語言,設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言也很適合搭配彙編語言來使用。儘管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標準規格寫出的C語言程式可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

3 c語言 -基本應用

對操作系統和系統使用程序以及需要對硬體進行操作的場合,用C語言明顯優於其它解釋型高級語言,有一些大型應用軟體也是用C語言編寫的。

C語言具有繪圖能力強,可移植性,並具備很強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫。它是數值計算的高級語言。

4 c語言 -入門

對於一個初學者,Microsoft Visual C++是一個比較好的軟體。界面友好,功能強大,調試也很方便。這是微軟出的一個C語言集成開發環境(IDE),主要有:VC++6.0、VS2005.VS2008.VS2010等,分為企業版和學生版等。對於初學者VC++6.0是比較容易上手的,但其對標準支持的不好可能使人養成不良的編程習慣。

在unix/linux操作系統上,學習c語言一般使用vim/emacs來編輯源文件,使用gcc來編譯源文件,使用make程序來管理編譯過程。

什麼人需要學習C語言?
從51JOB的統計數據來看,選擇C語言人才的企業多數以電子工程師、嵌入式工程師、硬體工程師、IOS工程師等為主,學曆本科以上相關專業,三年以上工作
經驗,且外語水平要求至少四級以上。既然C語言學習者的就業門檻那麼高,為什麼還有很多人執著的去學習C語言呢?總結而言,無外乎以下幾點原由:
1)C語言不是面向對象語言。因為這一點,任何學習C語言的人必須學會用函數思考問題。當你真正的去學習一門面向對象語言時,就會有C語言的函數學習基礎去對比。這會使學習面向對象編程更容易理解和更有樂趣。
2)用C編程就像進行智力體操。你要顧及到每一件事情,而這在很多其他語言中他會為你處理。你要管理指針,內存分配,和內存回收。你
要明白如何處理串,還有動態數據。在其他語言中,所有這些對你來說是隱藏的。你不知道他們如何運行,更不用說改變他們的運行方式了。你得到了使用的便利,
失卻了對程序的控制和速度。很多情況下,這是筆值得的買賣。其他的情況下就不是這樣了。
3)不同情況下你會使用不同的編程語言。某些情況下要求使用Lisp,其他的要Java,還有別的要C++。但是C是你堅實的基礎。你可能不會使用它做一些項目,但是它會幫助提高你的能力,熟練的用其他語言編程。
4)除了彙編語言之外,C代碼生成的程序比其他任何語言生成的程序來得更小和運行更快。那麼為什麼不學彙編語言呢?彙編是一門學了很有用的語言,但是它沒有C那樣的可移植性,並且其他流行的語言比如JAVA的語法是基於C的,而不是彙編。你仍然應該學彙編,但它並不會證明它會像學C那樣有用。
5)如果你想要寫一個視頻遊戲引擎或操作系統,你會需要C。你不能使用C#, Java, 或 Basic來完成這些編程任務。

5 c語言 -發展歷史

早期發展
C語言之父丹尼斯·里奇C語言之父丹尼斯·里奇

C語言的源頭是ALGOL 60語言。(也稱為A語言)

1963年,劍橋大學將ALGOL 60語言發展成為CPL(Combined Programming Language)語言。

1967年,劍橋大學的Matin Richards對CPL語言進行了簡化,於是產生了BCPL語言。

1970年,美國貝爾實驗室的Ken Thompson將BCPL進行了修改,並為它起了一個有趣的名字「B語言」。意思是將CPL語言煮干,提煉出它的精華。B語言是一種解釋語言,沒有類型之分,所以並不能有太大規模。

而在1973年,B語言也給人「煮」了一下,美國貝爾實驗室的D.M.Ritchie在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。

流行

為了使UNIX操作系統推廣,1977年Dennis M.Ritchie 發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》,即是著名的PCC(Portable C Compiler,可移植C編譯器)。

1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《C語言程序》(The C Programming Language),從而使C語言成為當時世界上流行最廣泛的高級程序設計語言。

制定標準

1988年,隨著微型計算機的日益普及, C語言出現了許多版本。由於沒有統一的標準,使得這些C語言之間出現了一些不一致的地方。為了改變這種情況,美國國家標準研究所(ANSI)為C語言制定了一套ANSI標準, 成為現行的C語言標準。在1990年,ISO再次採用了這種標準,所以也有一種別稱叫「C90」。1999年,ISO對C語言進行了修訂,簡稱「C99」。後來ANSI又採用了這種標準。

C語言發展迅速, 而且成為最受歡迎的語言之一, 主要因為它強大且靈活。許多著名的系統軟體, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C語言編寫的。用C語言加上一些彙編語言子程序, 就更能顯示C語言的優勢了,像PC-DOS、WORDSTAR等就是用這種方法編寫的。最受人矚目的C語言項目莫過於Linux內核了——一種類UNIX的自由開源內核。

新標準C99
c語言C語言程序設計

在ANSI的標準確立后,C語言的規範在一段時間內沒有大的變動,然而C++在自己的標準化創建過程中繼續發展壯大。《標準修正案一》在1995年為C語言創建了一個新標準,但是只修正了一些C89標準中的細節和增加更多更廣的國際字符集支持。不過,這個標準引出了1999年ISO 9899:1999的發表。它通常被稱為C99。C99被ANSI於2000年3月採用。

C99中包括的特性:

1.增加了對編譯器的限制,比如源程序每行要求至少支持到 4095 位元組,變數名函數名的要求支持到 63 位元組(extern 要求支持到 31)。 

2.增強了預處理功能。例如: 

3.宏支持取可變參數 #define Macro(...) __VA_ARGS__ 

4.使用宏的時候,允許省略參數,被省略的參數會被擴展成空串。 

5.支持 // 開頭的單行註釋(這個特性實際上在C89的很多編譯器上已經被支持了) 

6.增加了新關鍵字 restrict, inline, _Complex, _Imaginary, _Bool 

7.支持 long long, long double _Complex, float _Complex 等類型 

8.支持不定長的數組,即數組長度可以在運行時決定,比如利用變數作為數組長度。聲明時使用 int a[var] 的形式。不過考慮到效率和實現,不定長數組不能用在全局,或 struct 與 union 里。 

9.變數聲明不必放在語句塊的開頭,for 語句提倡寫成 for(int i=0;i<100;++i) 的形式,即i 只在 for 語句塊內部有效。 

10.允許採用(type_name){xx,xx,xx} 類似於 C++ 的構造函數的形式構造匿名的結構體。 

11.初始化結構的時候允許對特定的元素賦值,形式為: 

struct {int a[3],b;} foo[] =  { [0].a = {1}, [1].a = 2 };

struct {int a, b, c, d;} foo =  { .a = 1, .c = 3, 4, .b = 5}  // 3,4 是對 .c,.d 賦值的

12.格式化字元串中,利用 \u 支持 unicode 的字元。 

13.支持 16 進位的浮點數的描述。 

14.printf scanf 的格式化串增加了對 long long int 類型的支持。 

15.浮點數的內部數據描述支持了新標準,可以使用 #pragma 編譯器指令指定。 

16.除了已有的 __line__ __file__ 以外,增加了 __func__ 得到當前的函數名。 

17.允許編譯器化簡非常數的表達式。 

18.修改了 / % 處理負數時的定義,這樣可以給出明確的結果,例如在C89中-22 / 7 = -3, -22 % 7 = -1 ,也可以-22 / 7= -4, -22 % 7 = 6。 而C99中明確為 -22 / 7 = -3, -22 % 7 = -1,只有一種結果。 

19.取消了函數返回類型默認為 int 的規定。 

20.允許 struct 定義的最後一個數組不指定其長度,寫做 [] 。 

const const int i 將被當作 const int i 處理。 

21.增加和修改了一些標準頭文件,比如定義 bool 的 <stdbool.h> ,定義一些標準長度的 int 的 <inttypes.h> ,定義複數的 <complex.h> ,定義寬字元的 <wctype.h> ,類似於泛型的數學函數 <tgmath.h>, 浮點數相關的 <fenv.h>。 在<stdarg.h> 增加了 va_copy 用於複製 ... 的參數。<time.h> 里增加了 struct tmx ,對 struct tm 做了擴展。 
輸入輸出對寬字元以及長整數等做了相應的支持。 

但是各個公司對C99的支持所表現出來的興趣不同。當GCC和其它一些商業編譯器支持C99的大部分特性的時候[1],微軟和Borland卻似乎對此不感興趣。

6 c語言 -優點

c語言c語言
簡潔緊湊、靈活方便

C語言一共只有32個保留字,9種控制語句,程序書寫自由,主要用小寫字母表示。它把高級語言的基本結構和語句與低級語言的實用性結合起來。 C 語言可以象彙編語言一樣對位、位元組和地址進行操作, 而這三者是計算機最基本的工作單元。

運算符豐富

C的運算符包含的範圍很廣泛,共有種34個運算符。C語言把括弧、賦值、強制類型轉換等都作為運算符處理。從而使C的運算類型極其豐富表達式類型多樣化,靈活使用各種運算符可以實現在其它高級語言中難以實現的運算。

數據結構豐富

C的數據類型有:整型、實型、字元型、數組類型、指針類型、結構體類型、共用體類型等。能用來實現各種複雜的數據類型的運算。並引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能, 支持多種顯示器和驅動器。且計算功能、邏輯判斷功能強大。

C是結構式語言

結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰, 便於使用、維護以及調試。C語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控制程序流向,從而使程序完全結構化。

程序設計自由度大

雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。

可以直接對硬體進行操作

因此既具有高級語言的功能,又具有低級語言的許多功能,能夠象彙編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可以用來寫系統軟體。

程序執行效率高

C語言程序生成代碼質量高,一般只比彙編程序生成的目標代碼效率低10~20%。

可移植性好

C語言適用範圍大,C語言有一個突出的優點就是適合於多種操作系統, 如DOS、UNIX,也適用於多種機型。

7 c語言 -缺點

安全性有缺陷

C語言的缺點主要是表現在數據的封裝性上,這一點使得C在數據的安全性上做的有很大缺陷,這也是C和C++的一大區別。GNOME項目的GLib中的GObject對此進行了一些工作,可以使用。國人pingf編寫的OOC-GCC也值得一試。

C語言的語法限制不太嚴格,對變數的類型約束不嚴格,影響程序的安全性,對數組下標越界不作檢查等。

指針就是C語言的一大特色,可以說C語言優於其它高級語言的一個重要原因就是因為它有指針操作可以直接進行靠近硬體的操作,但是C的指針操作也給它帶來了很多不安全的因素。C++ 在這方面做了很好的改進,在保留了指針操作的同時又增強了安全性。Java取消了指針操作,提高了安全性。

語言較難掌握

從應用的角度,C語言比其他高級語言較難掌握。傳統的lint工具可以對大量常見錯誤進行偵測,流行的開源版本有splint。

8 c語言 -結構

結構特點
c語言c語言

1、一個C語言源程序可以由一個或多個源文件組成。

2、每個源文件可由一個或多個函數組成。

3、一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。

4、源程序中可以有預處理命令(include 命令僅為其中的一種),預處理命令通常應放在源文件或源程序的最前面。

5、每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括弧「}」之後不能加分號(struct、union等是例外)。

6、標識符,保留字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。

順序結構 順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。 分支結構 順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。分支結構適合於帶有邏輯或關係比較等條件判斷的計算,設計這類程序時往往都要先繪製其程序流程圖,然後根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易於理解。程序流程圖是根據解題分析所繪製的程序執行流程圖。 循環結構 循環結構可以減少源程序重複書寫的工作量,用來描述重複執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do –while循環和for循環。四種循環可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤。

順序結構、分支結構和循環結構並不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,均可廣義的把它們看成一個語句。在實際編程過程中常將這三種結構相互結合以實現各種演算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重複多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。

模塊化程序結構

 C語言的模塊化程序結構用函數來實現,即將複雜的C程序分為若干模塊,

每個模塊都編寫成一個C函數,然後通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數子函數。 因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,並通過上機調試加以鞏固。

掌握一些簡單的演算法:編程其實一大部分工作就是分析問題,找到解決問題的方法,再以相應的編程語言寫出代碼。這就要求掌握演算法,根據的《C程序設計》教學大綱中,只要求掌握一些簡單的演算法,在掌握這些基本演算法后,要完成對問題的分析就容易了。如兩個數的交換、三個數的比較、選擇法排序和冒泡法排序,這就要求要清楚這些演算法的內在含義。

9 c語言 -保留字

所謂保留字就是已被C語言本身使用, 不能作其它用途使用的字。例如不能用作變數名、函數名等。
由ANSI標準定義的C語言保留字共32個:

auto
 double intstruct
break
else
long
switch
 case enum register typedef charextern
 return union
 const float short unsigned continue for signed void
 default gotosizeof
 volatile do if while static

10 c語言 -語法

C語言由函數和變數組成。C的函數就像是Fortran中的子程序和函數。 


在C語言中,程序從main開始執行。main函數通過調用和控制其他函數進行工作。例如上面的printf。程序員可以自己寫函數,或從庫中調用函數。在上面的return 0;使得main返回一個值給調用程序的外殼,表明程序已經成功運行。

一個C語言的函數由返回值、函數名、參數列表(或void表示沒有返回值)和函數體組成。函數體的語法和其它的複合的語句部分是一樣的。

複合語句

C語言中的複合語句(或稱語句塊)的格式為:{語句;語句;……} 。

複合語句可以使得幾個語句從文法上變成一個語句。

有時必須使用複合語句,否則會產生錯誤。例如,在運用循環語句的時候,如果循環體(即循環中執行部分)包含多個語句(以分號隔開),則必須使用花括弧將他們合併成一個複合語句。如果不這麼做,系統僅把第一個分號前的內容看做循環體。

需要注意的是,部分C編譯器並不支持在任意位置使用複合語句。

條件語句

C語言有三種條件語句形式。兩種是if,另一種是switch。

循環語句

C語言有三種形式的循環語句:

1.do
    <語句>
while (<表達式>);

2.while (<表達式>)
    <語句>;

3.for (<表達式1> ; <表達式2> ; <表達式3>)
    <語句>;
在while和do中,語句將運行到表達式的值為零時結束。在do...while語句中,循環將至少被運行一次。這三種循環結構可以互相轉化。

跳轉語句

跳轉語句包括四種:goto,continue,break和return。

goto語句是無條件轉移語句:

標記必須在當前函數中定義,使用「標記:」的格式定義。程式將跳到標記處繼續運行。由於goto容易產生閱讀上的困難,所以應該盡量少用。

continue語句用在循環語句中,作用是退出當前一輪的循環,馬上開始下一輪循環。

break語句用在循環語句或switch中,作用是退出當前循環,跳到循環體外繼續運行。但是使用break只能跳出一層循環。在要跳出多重循環時,可以使用goto使得程式更為簡潔。

當一個函數運行退出后要返回一個值時,使用return。return可以跟一個表達式或變數。如果return後面沒有值,將運行不返回值。

數組

如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明。字元串也是一種數組。它們以ASCII的NUL作為數組的退出。要特別注意的是,方括內的索引值是從0算起的。

指針

如果一個變數聲明時在前面使用 * 號,表明這是個指針型變數。換句話說,該變數存儲一個地址,而 *(此處特指單目運算符 * ,下同。C語言中另有 雙目運算符 * ) 則是取內容操作符,意思是取這個內存地址里存儲的內容。指針是 C 語言區別於其他同時代高級語言的主要特徵之一。

指針不僅可以是變數的地址,還可以是數組、數組元素、函數的地址。通過指針作為形式參數可以在函數的調用過程得到一個以上的返回值(不同於return(z)這樣的僅能得到一個返回值。

指針是一把雙刃劍,許多操作可以通過指針自然的表達,但是不正確的或者過分的使用指針又會給程序帶來大量潛在的錯誤。

字元串

C語言的字元串其實就是char型數組,所以使用字元串並不需要引用庫。但是C標準庫確實包含了一些用於對字元串進行操作的函數,使得它們看起來就像字元串而不是數組。使用這些函數需要引用頭文件<string.h>。

文件輸入/輸出

在C語言中,輸入和輸出是經由標準庫中的一組函數來實現的。在ANSI/ISO C中,這些函數被定義在頭文件<stdio.h>中。

標準輸入/輸出

有三個標準輸入/輸出是標準I/O庫預先定義的:

stdin 標準輸入 
stdout 標準輸出 
stderr 輸入輸出錯誤 

函數

C語言的基本結構單位是函數。系統首先調用main函數(主函數),通過函數的嵌套調用,再調用其他函數。函數可以是系統自帶的函數,也可以是用戶定義的函數。C語言中,不允許函數的嵌套聲明。

11 c語言 -內存管理

C語言的特色之一是:程序員必須親自處理內存的分配細節。

C語言使用棧(Stack)來保存函數返回地址/棧禎基址、完成函數的參數傳遞和函數局部變數的存儲。 如果程序需要在運行的過程中動態分配內存,可以利用堆(Heap)來實現。

基本上C程序的元素存儲在內存的時候有3種分配策略:

靜態分配

如果一個變數聲明為全局變數或者是函數的靜態變數,這個變數的存儲將使用靜態分配方式。靜態分配的內存一般會被編譯器放在數據段或代碼段來存儲,具體取決於實現。這樣做的前提是,在編譯時就必須確定變數的大小。 以IA32的x86平台及gcc編譯器為例,全局及靜態變數放在數據段的低端;全局及靜態常量放在代碼段的高端。

自動分配

函數的自動局部變數應該隨著函數的返回會自動釋放(失效),這個要求在一般的體系中都是利用棧(Stack)來滿足的。相比於靜態分配,這時候,就不必絕對要求這個變數在編譯時就必須確定變數的大小,運行時才決定也不遲,但是C89仍然要求在編譯時就要確定,而C99放鬆了這個限制。但無論是C89還是C99,都不允許一個已經分配的自動變數運行時改變大小。

所以說C函數永遠不應該返回一個局部變數的地址。

要指出的是,自動分配也屬於動態分配,甚至可以用alloca函數來像分配堆(Heap)一樣進行分配,而且釋放是自動的。

動態分配

還有一種更加特殊的情況,變數的大小在運行時有可能改變,或者雖然單個變數大小不變,變數的數目卻有很大彈性,不能靜態分配或者自動分配,這時候可以使用堆(Heap)來滿足要求。ANSI C定義的堆操作函數是malloc、calloc、realloc和free。

使用堆(Heap)內存將帶來額外的開銷和風險。

12 c語言 -安全問題

C語言的特色之一是:語言不負責內存邊界檢查。

13 c語言 -開發環境

常用的C語言IDE(集成開發環境)有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc 等等……

14 c語言 -新標

在ANSI標準化后,C語言的標準在一段相當的時間內都保持不變,儘管C繼續在改進。(實際上,NormativeAmendment1在1995年已經開發了一個新的C語言版本。但是這個版本很少為人所知。)標準在90年代才經歷了改進,這就是ISO9899:1999(1999年出版)。這個版本就是通常提及的C99。它被ANSI於2000年3月採用。

在C99中包括的特性有:

對編譯器限制增加了,比如源程序每行要求至少支持到4095 位元組,變數名函數名的要求支持到63 位元組 (extern 要求支持到31)

預處理增強了。例如:

宏支持取參數 #define Macro(...) __VA_ARGS__

使用宏的時候,參數如果不寫,宏里用#,## 這樣的東西會擴展成空串。(以前會出錯的)

支持// 行註釋(這個特性實際上在C89的很多編譯器上已經被支持了)

增加了新關鍵字 restrict, inline,_Complex, _Imaginary,_Bool

支持 long long, long double _Complex, float _Complex 這樣的類型

支持 <: :> <% %> %: %:%: ,等等奇怪的符號替代

支持了不定長的數組。數組的長度就可以用變數了。聲明類型的時候呢,就用 int a[*] 這樣的寫法。不過考慮到效率和實現,這玩意並不是一個新類型。所以就不能用在全局裡,或者 struct union 裡面,如果你用了這樣的東西,goto 語句就受限制了。

變數聲明不必放在語句塊的開頭,for 語句提倡這麼寫 for(int i=0;i<100;++i) 就是說,int i 的聲明放在裡面,i 只在 for 裡面有效。(VC沒有遵守這條標準,i 在 for 外也有效)

當一個類似結構的東西需要臨時構造的時候,可以用(type_name){xx,xx,xx} 這有點像C++ 的構造函數

初始化結構的時候現在可以這樣寫:

struct {int a[3], b;} hehe[] = { [0].a = ,[1].a = 2 };

struct {int a, b, c, d;} hehe = { .a = 1,。c = 3,4, .b = 5} // 3,4 是對。c,.d 賦值的

字元串裡面,\u 支持 unicode 的字元

支持 16 進位的浮點數的描述

所以 printf scanf 的格式化串多支持了 ll / LL (VC6 里用的I64) 對應新的 long long 類型。

浮點數的內部數據描述支持了新標準,這個可以用 #pragma 編譯器指定

除了已經有的 __line__ __file__ 以外,又支持了一個__func__ 可以得到當前的函數名

對於非常數的表達式,也允許編譯器做化簡

修改了對於/ % 處理負數上的定義,比如老的標準里-22 / 7 = -3,-22 % 7 = -1 而現在-22 / 7 = -4,-22 % 7 = 6

取消了不寫函數返回類型默認就是 int 的規定

允許 struct 定義的最後一個數組寫做[] 不指定其長度描述

const const int i; 將被當作 const int i; 處理

增加和修改了一些標準頭文件, 比如定義 bool 的<stdbool.h> 定義一些標準長度的 int 的<inttypes.h> 定義複數的<complex.h> 定義寬字元的<wctype.h>有點泛型味道的數學函數 <tgmath.h> 跟浮點數有關的<fenv.h>。<stdarg.h>里多了一個 va_copy 可以複製。.. 的參數。<time.h> 里多了個 struct tmx 對 struct tm做了擴展

輸入輸出對寬字元還有長整數等做了相應的支持

15 c語言 -圖形編程


基於TC中的graphics.h
Turbo C提供了非常豐富的圖形函數,所有圖形函數的原型均在graphics. h中,本節主要介紹圖形模式的初始化、獨立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數。另外,使用圖形函數時要確保有顯示器圖形驅動程序*BGI,同時將集成開發環境Options/Linker中的Graphicslib選為on,只有這樣才能保證正確使用圖形函數。圖形模式的初始化不同的顯示器適配器有不同的圖形解析度。即是同一顯示器適配器,在不同模式下也有不同解析度。因此,在屏幕作圖之前,必須根據顯示器適配器種類將顯示器設置成為某種圖形模式,在未設置圖形模式之前,微機系統默認屏幕為文本模式(80列,25行字元模式),此時所有圖形函數均不能工作。設置屏幕為圖形模式,可用下列圖形初始化函數:

void far initgraph(int far *gdriver, int far *gmode,char *path);

其中gdriver和gmode分別表示圖形驅動器和模式,path是指圖形驅動程序所在的目錄路徑。有關圖形驅動器、圖形模式的符號常數及對應的解析度見下表。

圖形驅動程序由Turbo C出版商提供,文件擴展名為。BGI。根據不同的圖形適配器有不同的圖形驅動程序。例如對於EGA、 VGA 圖形適配器就調用驅動程序EGAVGA.BGI。
 

16 c語言 -初學C語言注意事項

初學C 語言的朋友應該首先了解C 語言關鍵的核心概念(結構化、三個執行流程、優先順序、指針、文件、共用體、函數、作用域、重載等),只有弄明白了這些才能在今後的學習中遊刃有餘的把握C 語言的精髓。這幾個概念就像邏輯線一樣,把整個C 語言的體系貫穿起來,給人一種「結構化」的思想體系。下面簡要談一下這幾個核心概念。
1、從宏觀角度來看,結構化是C 語言的編程思想基礎,就是說C 語言每一個功能模塊就是一個結構,每一個結構實現一個運算或一個演算法,這個結構就用大括弧表示「{ }」,大括弧裡面的就是演算法。尤其注意的是大括弧的「}」括在那裡,就決定在哪裡結束演算法功能。這些是初學者經常犯的錯誤,往往會把演算法功能的結束點弄錯。
2、三個執行流程就是順序流程、條件流程、循環流程。三個流程都是計算機通用的執行流程,是必須了解的流程,每一個演算法都基於這三個流程執行順序。
3、優先順序是對多個函數並列時候優先演算法的特權,沒有注意優先順序的順序就會把演算法出錯,這些優先順序是必須記住的。
4、指針是C 語言的重要特點,是對運算速度加快運算的重要精髓。它是對數據地址的操作,而不是對數據的操作。
5、文件和共用體是很簡單的概念,不用多說了。文件顧名思義和日常概念一樣,學過數據軟體的都對共用體了解不是太難。
6、從微觀角度來看,函數是C 語言的驅動機制,所有的語句都由函數驅動來實現的。記住函數命令和相關的配置參數,就能好好的利用C 的優勢。注意的是,函數不能記錯,不然你將得出錯的結果。如果能學會調試,那就會更深一層了解函數功能的作用。

17 c語言 -經典教材


The C Programming Language

本書是由C語言的設計者Brian W. Kernighan和Dennis M.Ritchie編寫的一部介紹標準C語言及其程序設計方法的權威性經典著作。全面、系統地講述了C語言的各個特性及程序設計的基本方法,包括基本概念、類型和表達式、控制流、函數與程序結構、指針與數組、結構、輸入與輸出、UNIX系統介面、標準庫等內容。

本書原著 即為C語言的設計者之一Dennis M.Ritchie和著名的計算機科學家Brian W.Kernighan合著的一本介紹C語言的權威經典著作。人們熟知的「hello,World」程序就是由本書首次引入的,現在,這一程序已經成為所有程序設計語言入門的第一課。原著第2版根據1987年制定的ANSIC標準做了適當的修訂,引入了最新的語言形式,並增加了新的示例,通過簡潔的描述、典型的示例,作者全面、系統、準確地講述了C語言的各個特性以及程序設計的基本方法。對於計算機從業人員來說,本書是一本必讀的程序設計語言方面的參考書。

Expert C Programming

《C專家編程》展示了最優秀的C程序員所使用的編碼技巧,並專門開闢了一章對C++的基礎知識進行了介紹。

書中C的歷史、語言特性、聲明、數組、指針、鏈接、運行時、內存以及如何進一步學習C++等問題進行了細緻的講解和深入的分析。全書擷取幾十幾個實例進行講解,對C程序員具有非常高的實用價值。

C Traps and pitfall

作者以自己1985年在貝爾實驗室時發表的一篇論文為基礎,結合自己的工作經驗擴展成為這本對C程序員具有珍貴价值的經典著作。寫作本書的出發點不是要批判C語言,而是要幫助C程序員繞過編程過程中的陷阱和障礙。

全書分為8章,分別從詞法分析、語法語義、連接、庫函數、預處理器、可移植性缺陷等幾個方面分析了C編程中可能遇到的問題。最後,作者用一章的篇幅給出了若干具有實用價值的建議。

Pointers on C

本書提供與C語言編程相關的全面資源和深入討論。本書通過對指針的基礎知識和高級特性的探討,幫助程序員把指針的強大功能融入到自己的程序中去。

全書共18章,覆蓋了數據、語句、操作符和表達式、指針、函數、數組、字元串、結構和聯合等幾乎所有重要的C編程話題。書中給出了很多編程技巧和提示,每章後面有針對性很強的練習,附錄部分則給出了部分練習的解答。

C: A Reference Manual

本書是關於C語言的詳盡的參考手冊。最新的第5版增加了對C99標準的介紹,更加符合當前讀者學習C語言的需要

全書分為兩大部分,共24章。第一部分討論了C語言的所有語言特徵,包括詞法、預處理機制、聲明、類型、表達式、語句以及函數等基本語言特性。第二部分討論了C語言的標準庫,根據它們不同的功能分別詳細介紹。為幫助讀者理解相關概念,本書在討論C語言及其標準庫的各方面問題時,提供了許多實例和解釋。在第一部分的各章中還提供了練習題,書後則給出了主要練習的解答。這些練習的主要目的是幫助讀者理解C語言的基本機制及其重要細節,其中並不涉及複雜的程序設計技術與問題。

C Primer Plu

本書全面講述了C語言編程的相關概念和知識。

全書共17章。第1.2章學習C語言編程所需的預備知識。第3到15章介紹了C語言的相關知識,包括數據類型、格式化輸入輸出、運算符、表達式、流程式控制制語句、函數、數組和指針、字元串操作、內存管理、位操作等等,知識內容都針對C99標準;另外,第10章強化了對指針的討論,第12章引入了動態內存分配的概念,這些內容更加適合讀者的需求。第16章和第17章討論了C預處理器和C庫函數、高級數據表示(數據結構)方面的內容。附錄給出了各章後面複習題、編程練習的答案和豐富的C編程參考資料。
上一篇[小笠原村]    下一篇 [外衣]

相關評論

同義詞:暫無同義詞