乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C語言一夜速成~?。?/span>

       陽光人生319 2009-02-16
       

      C語言一夜速成~??!

      2009-02-12 12:10:48 94人轉(zhuǎn)藏

      小貼士:我很喜歡這個口袋,我能訂閱它么?

      源程序的結(jié)構(gòu)特點

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

      2.每個源文件可由一個或多個函數(shù)組成。

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

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

      5.每一個說明,每一個語句都必須以分號結(jié)尾。但預(yù)處理命令,函數(shù)頭和花括號“}”之后不能加分號。

      6.標識符,關(guān)鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。

      在初學(xué)C語言時,可能會遇到有些問題理解不透,或者表達方式與以往數(shù)學(xué)學(xué)習(xí)中不同(如運算符等),這就要求不氣餒,不明白的地方多問多想,鼓足勇氣進行學(xué)習(xí),待學(xué)完后面的章節(jié)知識,前面的問題也就迎刃而解了,這一方面我感覺是我們同學(xué)最欠缺,大多學(xué)不好的就是因為一開始遇到困難就放棄,曾經(jīng)和好多同學(xué)談他的問題,回答是聽不懂、不想聽、放棄這樣三個過程,我反問,這節(jié)課你聽過課嗎?回答又是沒有,根本就沒聽過課,怎么說自己聽不懂呢?相應(yīng)的根本就沒學(xué)習(xí),又談何學(xué)的好?



      學(xué)習(xí)C語言始終要記住“曙光在前頭”和“千金難買回頭看”,“千金難買回頭看”是學(xué)習(xí)知識的重要方法,就是說,學(xué)習(xí)后面的知識,不要忘了回頭弄清遺留下的問題和加深理解前面的知識,這是我們學(xué)生最不易做到的,然而卻又是最重要的。學(xué)習(xí)C語言就是要經(jīng)過幾個反復(fù),才能前后貫穿,積累應(yīng)該掌握的C知識。

      那么,我們?nèi)绾螌W(xué)好《C程序設(shè)計》呢?

      一.學(xué)好C語言的運算符和運算順序

      這是學(xué)好《C程序設(shè)計》的基礎(chǔ),C語言的運算非常靈活,功能十分豐富,運算種類遠多于其它程序設(shè)計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單,但初學(xué)者往往會覺的這種表達式難讀,關(guān)鍵原因就是對運算符和運算順序理解不透不全。當多種不同運算組成一個運算表達式,即一個運算式中出現(xiàn)多種運算符時,運算的優(yōu)先順序和結(jié)合規(guī)則顯得十分重要。在學(xué)習(xí)中,只要我們對此合理進行分類,找出它們與我們在數(shù)學(xué)中所學(xué)到運算之間的不同點之后,記住這些運算也就不困難了,有些運算符在理解后更會牢記心中,將來用起來得心應(yīng)手,而有些可暫時放棄不記,等用到時再記不遲。



      先要明確運算符按優(yōu)先級不同分類,《C程序設(shè)計》運算符可分為15種優(yōu)先級,從高到低,優(yōu)先級為1 ~

      15,除第2、3級和第14級為從右至左結(jié)合外,其它都是從左至右結(jié)合,它決定同級運算符的運算順序.

      2) 分支結(jié)構(gòu)

      順序結(jié)構(gòu)的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對于要先做判斷再選擇的問題就要使用分支結(jié)構(gòu)。分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設(shè)計方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當?shù)姆种дZ句。分支結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計算,設(shè)計這類程序時往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫出源程序,這樣做把程序設(shè)計分析與語言分開,使得問題簡單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。



      學(xué)習(xí)分支結(jié)構(gòu)不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執(zhí)行的功能,嵌套結(jié)構(gòu)也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結(jié)構(gòu)。

      ①if(條件)

      {分支體}

      這種分支結(jié)構(gòu)中的分支體可以是一條語句,此時“{

      }”可以省略,也可以是多條語句即復(fù)合語句。它有兩條分支路徑可選,一是當條件為真,執(zhí)行分支體,否則跳過分支體,這時分支體就不會執(zhí)行。如:要計算x的絕對值,根據(jù)絕對值定義,我們知道,當x>=0時,其絕對值不變,而x

      ②if(條件)

      {分支1}

      else

      {分支2}

      這是典型的分支結(jié)構(gòu),如果條件成立,執(zhí)行分支1,否則執(zhí)行分支2,分支1和分支2都可以是1條或若干條語句構(gòu)成。如:求ax^2+bx+c=0的根



      分析:因為當b^2-4ac>=0時,方程有兩個實根,否則(b^2-4ac=0)

      {x1=(-b+sqrt(d))/2a;

      x2=(-b-sqrt(d))/2a;

      printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);

      }

      else

      {r=-b/(2*a);

      i =sqrt(-d)/(2*a);

      printf(“x1=%8.4f+%8.4fi\n”r, i);

      printf(“x2=%8.4f-%8.4fi\n”r,i)

      }

      ③嵌套分支語句:其語句格式為:

      if(條件1) {分支1};

      else if(條件2) {分支2}

      else if(條件3) {分支3}

      ……

      else if(條件n) {分支n}

      else {分支n+1}

      嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套后,語句結(jié)構(gòu)變得非常復(fù)雜,對于程序的閱讀和理解都極為不便,建議嵌套在3重以內(nèi),超過3重可以用下面的語句。



      ④switch開關(guān)語句:該語句也是多分支選擇語句,到底執(zhí)行哪一塊,取決于開關(guān)設(shè)置,也就是表達式的值與常量表達式相匹配的那一路,它不同if…else

      語句,它的所有分支都是并列的,程序執(zhí)行時,由第一分支開始查找,如果相匹配,執(zhí)行其后的塊,接著執(zhí)行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。這個語句在應(yīng)用時要特別注意開關(guān)條件的合理設(shè)置以及break語句的合理應(yīng)用。

      (3)循環(huán)結(jié)構(gòu):

      循環(huán)結(jié)構(gòu)可以減少源程序重復(fù)書寫的工作量,用來描述重復(fù)執(zhí)行某段算法的問題,這是程序設(shè)計中最能發(fā)揮計算機特長的程序結(jié)構(gòu),C語言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do

      Cwhile循環(huán)和for循環(huán)。四種循環(huán)可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因為強制改變程序的順序經(jīng)常會給程序的運行帶來不可預(yù)料的錯誤,在學(xué)習(xí)中我們主要學(xué)習(xí)while、do…while、for三種循環(huán)。常用的三種循環(huán)結(jié)構(gòu)學(xué)習(xí)的重點在于弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環(huán)的格式和執(zhí)行順序,將每種循環(huán)的流程圖理解透徹后就會明白如何替換使用,如把while循環(huán)的例題,用for語句重新編寫一個程序,這樣能更好地理解它們的作用。特別要注意在循環(huán)體內(nèi)應(yīng)包含趨于結(jié)束的語句(即循環(huán)變量值的改變),否則就可能成了一個死循環(huán),這是初學(xué)者的一個常見錯誤。



      在學(xué)完這三個循環(huán)后,應(yīng)明確它們的異同點:用while和do…while循環(huán)時,循環(huán)變量的初始化的操作應(yīng)在循環(huán)體之前,而for循環(huán)一般在語句1中進行的;while

      循環(huán)和for循環(huán)都是先判斷表達式,后執(zhí)行循環(huán)體,而do…while循環(huán)是先執(zhí)行循環(huán)體后判斷表達式,也就是說do…while的循環(huán)體最少被執(zhí)行一次,而while

      循環(huán)和for就可能一次都不執(zhí)行。另外還要注意的是這三種循環(huán)都可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán),而goto語句與if構(gòu)成的循環(huán),是不能用break和

      continue語句進行控制的。

      順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)并不彼此孤立的,在循環(huán)中可以有分支、順序結(jié)構(gòu),分支中也可以有循環(huán)、順序結(jié)構(gòu),其實不管哪種結(jié)構(gòu),我們均可廣義的把它們看成一個語句。在實際編程過程中常將這三種結(jié)構(gòu)相互結(jié)合以實現(xiàn)各種算法,設(shè)計出相應(yīng)程序,但是要編程的問題較大,編寫出的程序就往往很長、結(jié)構(gòu)重復(fù)多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設(shè)計成模塊化結(jié)構(gòu)。

      (4)模塊化程序結(jié)構(gòu)

      C語言的模塊化程序結(jié)構(gòu)用函數(shù)來實現(xiàn),即將復(fù)雜的C程序分為若干模塊,每個模塊都編寫成一個C函數(shù),然后通過主函數(shù)調(diào)用函數(shù)及函數(shù)調(diào)用函數(shù)來實現(xiàn)一大型問題的C程序編寫,因此常說:C程序=主函數(shù)+子函數(shù)。

      因此,對函數(shù)的定義、調(diào)用、值的返回等中要尤其注重理解和應(yīng)用,并通過上機調(diào)試加以鞏固。

      三.掌握一些簡單的算法

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

      結(jié)語:當我們把握好上述幾方面后,只要同學(xué)們能克服畏難、厭學(xué)、上課能專心聽講,做好練習(xí)與上機調(diào)試,其實C語言并不難學(xué)

      所謂關(guān)鍵字就是已被C語言本身使用, 不能作其它用途使用的字。例如關(guān)鍵字不能用作變量名、函數(shù)名等

      由ANSI標準定義的C語言關(guān)鍵字共32個 :

      auto double int struct break else long switch

      case enum register typedef char extern return union

      const float short unsigned continue for signed void

      default goto sizeof volatile do if while static

      根據(jù)關(guān)鍵字的作用,可以將關(guān)鍵字分為數(shù)據(jù)類型關(guān)鍵字和流程控制關(guān)鍵字兩大類。

      1 數(shù)據(jù)類型關(guān)鍵字

      A基本數(shù)據(jù)類型(5個)

      void :聲明函數(shù)無返回值或無參數(shù),聲明無類型指針,顯式丟棄運算結(jié)果

      char :字符型類型數(shù)據(jù),屬于整型數(shù)據(jù)的一種

      int :整型數(shù)據(jù),通常為編譯器指定的機器字長

      float :單精度浮點型數(shù)據(jù),屬于浮點數(shù)據(jù)的一種

      double :雙精度浮點型數(shù)據(jù),屬于浮點數(shù)據(jù)的一種

      B 類型修飾關(guān)鍵字(4個)

      short :修飾int,短整型數(shù)據(jù),可省略被修飾的int。

      long :修飾int,長整形數(shù)據(jù),可省略被修飾的int。

      signed :修飾整型數(shù)據(jù),有符號數(shù)據(jù)類型

      unsigned :修飾整型數(shù)據(jù),無符號數(shù)據(jù)類型

      C 復(fù)雜類型關(guān)鍵字(5個)

      struct :結(jié)構(gòu)體聲明

      union :共用體聲明

      enum :枚舉聲明

      typedef :聲明類型別名

      sizeof :得到特定類型或特定類型變量的大小

      D 存儲級別關(guān)鍵字(6個)

      auto :指定為自動變量,由編譯器自動分配及釋放。通常在棧上分配

      static :指定為靜態(tài)變量,分配在靜態(tài)變量區(qū),修飾函數(shù)時,指定函數(shù)作用域為文件內(nèi)部

      register :指定為寄存器變量,建議編譯器將變量存儲到寄存器中使用,也可以修飾函數(shù)形參,建議編譯器通過寄存器而不是堆棧傳遞參數(shù)

      extern :指定對應(yīng)變量為外部變量,即在另外的目標文件中定義,可以認為是約定由另外文件聲明的對象的一個“引用”

      const :與volatile合稱“cv特性”,指定變量不可被當前線程/進程改變(但有可能被系統(tǒng)或其他線程/進程改變)

      volatile :與const合稱“cv特性”,指定變量的值有可能會被系統(tǒng)或其他進程/線程改變,強制編譯器每次從內(nèi)存中取得該變量的值

      2 流程控制關(guān)鍵字

      A 跳轉(zhuǎn)結(jié)構(gòu)(4個)

      return :用在函數(shù)體中,返回特定值(或者是void值,即不返回值)

      continue :結(jié)束當前循環(huán),開始下一輪循環(huán)

      break :跳出當前循環(huán)或switch結(jié)構(gòu)

      goto :無條件跳轉(zhuǎn)語句

      B 分支結(jié)構(gòu)(5個)

      if :條件語句

      else :條件語句否定分支(與if連用)

      switch :開關(guān)語句(多重分支語句)

      case :開關(guān)語句中的分支標記

      default :開關(guān)語句中的“其他”分治,可選。

      C 循環(huán)結(jié)構(gòu)(3個)

      for :for循環(huán)結(jié)構(gòu),for(1;2;3)4;的執(zhí)行順序為1->2->4->3->2...循環(huán),其中2為循環(huán)條件

      do :do循環(huán)結(jié)構(gòu),do 1 while(2); 的執(zhí)行順序是 1->2->1...循環(huán),2為循環(huán)條件

      while :while循環(huán)結(jié)構(gòu),while(1) 2; 的執(zhí)行順序是1->2->1...循環(huán),1為循環(huán)條件

      以上循環(huán)語句,當循環(huán)條件表達式為真則繼續(xù)循環(huán),為假則跳出循環(huán)。 在ANSI標準化后,C語言的標準在一段相當?shù)臅r間內(nèi)都保持不變,盡管C++繼續(xù)在改進。(實際上,Normative

      Amendment1在1995年已經(jīng)開發(fā)了一個新的C語言版本。但是這個版本很少為人所知。)標準在90年代才經(jīng)歷了改進,這就是ISO9899:1999(1999年出版)。這個版本就是通常提及的C99。它被ANSI于2000年三月采用。



      在C99中包括的特性有:

      對編譯器限制增加了,比如源程序每行要求至少支持到 4095 字節(jié),變量名函數(shù)名的要求支持到 63 字節(jié) (extern 要求支持到

      31)

      預(yù)處理增強了。例如:

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

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

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

      增加了新關(guān)鍵字 restrict, inline, _Complex, _Imaginary, _Bool

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

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

      支持了不定長的數(shù)組。數(shù)組的長度就可以用變量了。聲明類型的時候呢,就用 int a[*]

      這樣的寫法。不過考慮到效率和實現(xiàn),這玩意并不是一個新類型。所以就不能用在全局里,或者 struct union

      里面,如果你用了這樣的東西,goto 語句就受限制了。

      變量聲明不必放在語句塊的開頭,for 語句提倡這么寫 for(int i=0;i

      對于非常數(shù)的表達式,也允許編譯器做化簡

      修改了對于 / % 處理負數(shù)上的定義,比如老的標準里 -22 / 7 = -3, -22 % 7 = -1 而現(xiàn)在 -22 / 7 =

      -4, -22 % 7 = 6

      取消了不寫函數(shù)返回類型默認就是 int 的規(guī)定

      允許 struct 定義的最后一個數(shù)組寫做 [] 不指定其長度描述

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

      增加和修改了一些標準頭文件, 比如定義 bool 的 定義一些標準長度的 int 的

      定義復(fù)數(shù)的 定義寬字符的 有點泛型味道的數(shù)學(xué)函數(shù) 跟浮點數(shù)有關(guān)的

      。 里多了一個 va_copy 可以復(fù)制 ... 的參數(shù)。 里多了個 struct

      tmx 對 struct tm 做了擴展

      輸入輸出對寬字符還有長整數(shù)等做了相應(yīng)的支持

      相對于c89的變化還有

      1、增加restrict指針

      C99中增加了公適用于指針的restrict類型修飾符,它是初始訪問指針所指對象的惟一途徑,因此只有借助restrict指針表達式才能訪問對象。restrict指針指針主要用做函數(shù)變元,或者指向由malloc()函數(shù)所分配的內(nèi)存變量。restrict數(shù)據(jù)類型不改變程序的語義。



      如果某個函數(shù)定義了兩個restrict指針變元,編譯程序就假定它們指向兩個不同的對象,memcpy()函數(shù)就是restrict指針的一個典型應(yīng)用示例。C89中memcpy()函數(shù)原型如下:



      代碼: void *memcpy (void *s1, const void *s2, size_t size);

      如果s1和s2所指向的對象重疊,其操作就是未定義的。memcpy()函數(shù)只能用于不重疊的對象。C99中memcpy()函數(shù)原型如下:代碼:

      void *memcpy(void *restrict s1, const void *restrict s2,size_t

      size);

      通過使用restrict修飾s1和s2 變元,可確保它們在該原型中指向不同的對象。

      2、inline(內(nèi)聯(lián))關(guān)鍵字

      內(nèi)聯(lián)函數(shù)除了保持結(jié)構(gòu)化和函數(shù)式的定義方式外,還能使程序員寫出高效率的代碼.函數(shù)的每次調(diào)用與返回都會消耗相當大的系統(tǒng)資源,尤其是當函數(shù)調(diào)用發(fā)生在重復(fù)次數(shù)很多的循環(huán)語句中時.一般情況下,當發(fā)生一次函數(shù)調(diào)用時,變元需要進棧,各種寄存器內(nèi)存需要保存.當函數(shù)返回時,寄存器的內(nèi)容需要恢復(fù)。如果該函數(shù)在代碼內(nèi)進行聯(lián)機擴展,當代碼執(zhí)行時,這些保存和恢復(fù)操作旅游活動會再發(fā)生,而且函數(shù)調(diào)用的執(zhí)行速度也會大大加快。函數(shù)的聯(lián)機擴展會產(chǎn)生較長的代碼,所以只應(yīng)該內(nèi)聯(lián)對應(yīng)用程序性能有顯著影響的函數(shù)以及長度較短的函數(shù)

      3、新增數(shù)據(jù)類型

      _Bool

      值是0或1。C99中增加了用來定義bool、true以及false宏的頭文件夾,以便程序員能夠編寫同時兼容于C與C++的應(yīng)用程序。在編寫新的應(yīng)用程序時,應(yīng)該使用



      頭文件中的bool宏。

      _Complex and _Imaginary

      C99標準中定義的復(fù)數(shù)類型如下:float_Complex; float_Imaginary; double_Complex;

      double_Imaginary; long double_Complex; long double_Imaginary.

      頭文件中定義了complex和imaginary宏,并將它們擴展為_Complex和_Imaginary,因此在編寫新的應(yīng)用程序時,應(yīng)該使用頭文件中的complex和imaginary宏。



      long long int

      C99標準中引進了long long int(-(2e63 - 1)至2e63 - 1)和unsigned long long

      int(0 - 2e64 - 1)。long long int能夠支持的整數(shù)長度為64位。

      4、對數(shù)組的增強

      可變長數(shù)組

      C99中,程序員聲明數(shù)組時,數(shù)組的維數(shù)可以由任一有效的整型表達式確定,包括只在運行時才能確定其值的表達式,這類數(shù)組就叫做可變長數(shù)組,但是只有局部數(shù)組才可以是變長的.



      可變長數(shù)組的維數(shù)在數(shù)組生存期內(nèi)是不變的,也就是說,可變長數(shù)組不是動態(tài)的.可以變化的只是數(shù)組的大小.可以使用*來定義不確定長的可變長數(shù)組。



      數(shù)組聲明中的類型修飾符

      在C99中,如果需要使用數(shù)組作為函數(shù)變元,可以在數(shù)組聲明的方括號內(nèi)使用static關(guān)鍵字,這相當于告訴編譯程序,變元所指向的數(shù)組將至少包含指定的元素個數(shù)。也可以在數(shù)組聲明的方括號內(nèi)使用restrict,volatile,const關(guān)鍵字,但只用于函數(shù)變元。如果使用restrict,指針是初始訪問該對象的惟一途徑。如果使用const,指針始終指向同一個數(shù)組。使用volatile沒有任何意義。

      5、單行注釋

      引入了單行注釋標記 "http://" , 可以象C++一樣使用這種注釋了。

      6、分散代碼與聲明

      7、預(yù)處理程序的修改

      a、變元列表

      宏可以帶變元,在宏定義中用省略號(...)表示。內(nèi)部預(yù)處理標識符__VA_ARGS__決定變元將在何處得到替換。例:#define

      MySum(...) sum(__VA_ARGS__) 語句MySum(k,m,n);

      將被轉(zhuǎn)換成:sum(k, m, n); 變元還可以包含變元。例: #define compare(compf, ...)

      compf(__VA_ARGS__) 其中的compare(strcmp,"small", "large");

      將替換成:strcmp("small","large");

      b、_Pragma運算符

      C99引入了在程序中定義編譯指令的另外一種方法:_Pragma運算符。格式如下:

      _Pragma("directive")

      其中directive是要滿打滿算的編譯指令。_Pragma運算符允許編譯指令參與宏替換。

      c、內(nèi)部編譯指令

      STDCFP_CONTRACT ON/OFF/DEFAULT 若為ON,浮點表達式被當做基于硬件方式處理的獨立單元。默認值是定義的工具。



      STDCFEVN_ACCESS ON/OFF/DEFAULT 告訴編譯程序可以訪問浮點環(huán)境。默認值是定義的工具。

      STDC CX_LIMITED_RANGE ON/OFF/DEFAULT

      若值為ON,相當于告訴編譯程序某程序某些含有復(fù)數(shù)的公式是可靠的。默認是OFF。

      d、新增的內(nèi)部宏

      __STDC_HOSTED__ 若操作系統(tǒng)存在,則為1

      __STDC_VERSION__ 199991L或更高。代表C的版本

      __STDC_IEC_599__ 若支持IEC 60559浮點運算,則為1

      __STDC_IEC_599_COMPLEX__ 若支持IEC 60599復(fù)數(shù)運算,則為1

      __STDC_ISO_10646__ 由編譯程序支持,用于說明ISO/IEC 10646標準的年和月格式:yyymmmL

      C99中,結(jié)構(gòu)中的最后一個元素允許是未知大小的數(shù)組,這就叫做柔性數(shù)組成員,但結(jié)構(gòu)中的柔性數(shù)組成員前面必須至少一個其他成員。柔性數(shù)組成員允許結(jié)構(gòu)中包含一個大小可變的數(shù)組。sizeof返回的這種結(jié)構(gòu)大小不包括柔性數(shù)組的內(nèi)存。包含柔性數(shù)組成員的結(jié)構(gòu)用malloc()函數(shù)進行內(nèi)存的動態(tài)分配,并且分配的內(nèi)存應(yīng)該大于結(jié)構(gòu)的大小,以適應(yīng)柔性數(shù)組的預(yù)期大小。



      11、指定的初始化符

      C99中,該特性對經(jīng)常使用稀疏數(shù)組的程序員十分有用。指定的初始化符通常有兩種用法:用于數(shù)組,以及用于結(jié)構(gòu)和聯(lián)合。用于數(shù)組的格式:[index]

      = vol; 其中,index表示數(shù)組的下標,vol表示本數(shù)組元素的初始化值。

      例如: int x[10] = {[0] = 10, [5] = 30};

      其中只有x[0]和x[5]得到了初始化.用于結(jié)構(gòu)或聯(lián)合的格式如下:

      member-name(成員名稱)

      對結(jié)構(gòu)進行指定的初始化時,允許采用簡單的方法對結(jié)構(gòu)中的指定成員進行初始化。

      例如: struct example{ int k, m, n; } object = {m = 10,n = 200};

      其中,沒有初始化k。對結(jié)構(gòu)成員進行初始化的順序沒有限制。

      12、printf()和scanf()函數(shù)系列的增強

      C99中printf()和scanf()函數(shù)系列引進了處理long long int和unsigned long long

      int數(shù)據(jù)類型的特性。long long int 類型的格式修飾符是ll。在printf()和scanf()函數(shù)中,ll適用于d, i,

      o, u 和x格式說明符。另外,C99還引進了hh修飾符。當使用d, i, o,

      u和x格式說明符時,hh用于指定char型變元。ll和hh修飾符均可以用于n說明符。

      格式修飾符a和A用在printf()函數(shù)中時,結(jié)果將會輸出十六進制的浮點數(shù)。格式如下:[-]0xh, hhhhp + d

      使用A格式修飾符時,x和p必須是大寫。A和a格式修飾符也可以用在scanf()函數(shù)中,用于讀取浮點數(shù)。調(diào)用printf()函數(shù)時,允許在%f說明符前加上l修飾符,即%lf,但不起作用。



      13、C99新增的庫

      C89中標準的頭文件

      定義宏assert()

      字符處理

      錯誤報告

      定義與實現(xiàn)相關(guān)的浮點值勤

      定義與實現(xiàn)相關(guān)的各種極限值

      支持函數(shù)setlocale()

      數(shù)學(xué)函數(shù)庫使用的各種定義

      支持非局部跳轉(zhuǎn)

      定義信號值

      支持可變長度的變元列表

      定義常用常數(shù)

      支持文件輸入和輸出

      其他各種聲明

      支持串函數(shù)

      支持系統(tǒng)時間函數(shù)

      C99新增的頭文件和庫

      支持復(fù)數(shù)算法

      給出對浮點狀態(tài)標記和浮點環(huán)境的其他方面的訪問

      定義標準的、可移植的整型類型集合。也支持處理最大寬度整數(shù)的函數(shù)

      首先在此1995年第一次修訂時引進,用于定義對應(yīng)各種運算符的宏

      支持布爾數(shù)據(jù)類型類型。定義宏bool,以便兼容于C++

      定義標準的、可移植的整型類型集合。該文件包含在中

      定義一般類型的浮點宏

      首先在1995年第一次修訂時引進,用于支持多字節(jié)和寬字節(jié)函數(shù)

      首先在1995年第一次修訂時引進,用于支持多字節(jié)和寬字節(jié)分類函數(shù)

      14、__func__預(yù)定義標識符

      用于指出__func__所存放的函數(shù)名,類似于字符串賦值。

      15、其它特性的改動

      放寬的轉(zhuǎn)換限制

      限制 C89標準 C99標準

      數(shù)據(jù)塊的嵌套層數(shù) 15 127

      條件語句的嵌套層數(shù) 8 63

      內(nèi)部標識符中的有效字符個數(shù) 31 63

      外部標識符中的有效字符個數(shù) 6 31

      結(jié)構(gòu)或聯(lián)合中的成員個數(shù) 127 1023

      函數(shù)調(diào)用中的參數(shù)個數(shù) 31 127

      不再支持隱含式的int規(guī)則

      刪除了隱含式函數(shù)聲明

      對返回值的約束

      C99中,非空類型函數(shù)必須使用帶返回值的return語句.

      擴展的整數(shù)類型

      擴展類型 含義

      int16_t 整數(shù)長度為精確16位

      int_least16_t 整數(shù)長度為至少16位

      int_fast32_t 最穩(wěn)固的整數(shù)類型,其長度為至少32位

      intmax_t 最大整數(shù)類型

      uintmax_t 最大無符號整數(shù)類型

      對整數(shù)類型提升規(guī)則的改進

      C89中,表達式中類型為char,short int或int的值可以提升為int或unsigned int類型.

      C99中,每種整數(shù)類型都有一個級別.例如:long long int 的級別高于int,

      int的級別高于char等.在表達式中,其級別低于int或unsigned int的任何整數(shù)類型均可被替換成int或unsigned

      int類型.

      有必要說明的是,c99的main()函數(shù)要求必須返回一個int值給程序的激活者(通常是操作系統(tǒng))0表示正常推出,非0表示異常。

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

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多