国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言編程常見問題解答之ANSI/ISO標準

2019-11-17 05:40:26
字體:
來源:轉載
供稿:網友
    假如你不理解C語言標準的價值,你就不會知道你是怎樣地幸運。
    一個C程序員會期望一個C程序無論是在哪里開發的,在另一個編譯程序中都能通過編譯。實際上不能完全做到這一點,因為許多頭文件和函數庫都是針對某些特定的編譯程序或平臺的。有些(很少!)語言擴充性能,例如基于Intel的編譯程序所使用的near和far要害字以及寄存器偽變量,也只不過是某種平臺的開發商們所認可的一種標準。
    假如你認為靠一種標準走遍天下是理所當然的,就象左腳踩加速器,右腳踩剎車一樣,那么你的視野未免有些狹窄。有兩種不同的BASIC標準,但都沒有得到廣泛的支持;世界上最流行的Pascal編譯程序并不符合正式的標準;現在正在發展的C++標準,由于變化太快,也沒有得到廣泛的支持;有些實現遵循一種嚴格的Ada標準,但Ada標準也沒能大規模地占領世界市場。
    從技術上講有兩種C語言標準,一種來自ANSI(American National Standard Institute,美國國家標準協會)X3J11委員會,另一種來自ISO(International Standard Organization,國際標準協會)9899—1990。由于ISO標準中的某些改進優于ANSI標準,而ANSI標準也接受了這個國際版本,因此"ANSI/ISO標準”是一種正確的說法。
    那么,這種標準對你有什么幫助呢?你可以買到一份該標準的副本,即Herbert Schildt所著的((The Annotated ANSI C Standard》(Osborne McGraw-Hill出版,ISBN O-07-881952-O)一書,該書對語言和庫都作了介紹,并帶有注釋。這本書比大多數正式標準要便宜多了,后者由ANSI和ISO出售,以解決建立標準所需的部分費用。并不是每一個C程序員都需要這樣一本書,但它是最權威的。
    最重要的一點是,ANSI/ISO標準是對“什么是c?”這一問題的權威解答。假如編譯程序開發商所做的某些實現不符合這一標準,你可以把它作為錯誤指出來,這不會引起爭論。
    ANSI/ISO標準也不是包羅萬象的。具體地說,它沒有涉及c程序可能會做的許多有趣的事情,例如圖形或多任務。許多兼容性不強的標準包含了這些內容,其中的一些將來可能會成為權威的標準,因此你不必完全拘泥于ANSI/ISO標準。
    順便提一句,除編程語言之外,還有許多東西也有ANSI標準,其中的一種就是ANSI為全屏幕文本操作的退出序列集合而寫的標準,在第17章中所介紹的MS—DOS的"ANSI驅動程序”指的就是這種標準(有趣的是,MS-DOS的ANSI.SYS只實現了ANSI標準序列中的一小部分)。

    16.1  運算符的優先級總能起作用嗎?
    有關運算符優先級的規則稍微有點復雜。在大多數情況下,這些規則確實是你所需要的,然而,有人也指出其中的一些規則本來是可以設計得更好的。
    讓我們快速地回顧一些有關內容:“運算符優先級”是這樣一些規則的集合——這些規則規定了“運算符”(例如+,-,等等)的優先性,即哪一種運算符先參加運算。在數學中,表達式“2×3+4×5”和“(2×3)+(4×5)”是等價的,因為乘法運算在加法運算之前進行,也就是說乘法的優先級比加法高。
    在c中,有16級以上的運算符優先級。盡管這么多的規則有時使c程序不易閱讀,但也使C程序寫起來輕易多了。雖然這不是唯一的一種折衷方法,但這就是C所采用的方法。表16.1總結了運算符的優先級。           表16.1 運算符優先級總結(從高到低)
----------------------------------------------------------------------------------
  優先級            運算符
----------------------------------------------------------------------------------
  1                x[y](下標)
                   x(y)(函數調用)
                   x.y(訪問成員)
                  x->y(訪問成員指針)
                   x++(后綴自增)
                   x--(后綴自減)--
    2             ++x(自增)
                   --x(自減)
                  &x(取地址)
                   *x(指針引用)
                  +x(同x,和數學中相同)
                  -x(數學求負)
                  !x(邏輯非)
                  ~x(按位求反)
                   sizeof x和sizeof(x_t)(字節數大小)
   3               (x_t)y(強制類型轉換)
   4              x*y(乘法)
                   x/y(除法)
                   x%y(求余)
   5              x+y(加法)
                   x-y(減法)
   6              x<<y(按位左移)
                   x>>y(按位右移)
    7              x<y,x>y,x<=y,x>=y(關系比較)
    8             x==y,x!=y(相等比較)
    9              x&y(按位與)
    10             x^y(按位異或)  .
    11             x y(按位或)
    12            x&&y(邏輯與)
    13             xy(邏輯或)
    14             x?y:z(條件)
                  x=y,x*=y,x/=y,x+=y,x-=y,<<=,>>=,&=,^=,=(賦值,右結合性)
    16    x,y(逗號)
--------------------------------------------------------------------------------------
    優先級最高的是后綴表達式,即運算符跟在一個表達式后面;其次是前綴或單目表達式,即運算符位于一個表達式的前面;再次是強制類型轉換表達式。
    注重:關于運算符優先級,最重要的是知道*p++和*(p++)是等價的。也就是說,在*p++中,++運算符作用在指針上,而不是作用在指針所指向的對象上。象“*p++=*q++;這樣的代碼在C中是隨處可見的,其中的優先級和“(*(p++))=(*(q++))”中的是相同的。這個表達式的含義是“q+1,但仍用q原來的值找到q所指向的對象;p加1,但仍用p原來的值;把q所指向的對象賦給p所指向的對象”,整個表達式的值就是原來q所指向的對象。在C中你會經??吹竭@樣的代碼,并且你會有許多機會去寫這樣的代碼。對于其它運算符,假如你記不住其優先級,


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 运城市| 汕头市| 甘泉县| 钦州市| 江门市| 合川市| 黑山县| 涟源市| 吉林市| 汨罗市| 永德县| 美姑县| 松桃| 玉环县| 弋阳县| 铜梁县| 东乌珠穆沁旗| 册亨县| 阜阳市| 同心县| 沁阳市| 盐津县| 岳西县| 腾冲县| 金沙县| 西安市| 文水县| 长春市| 上犹县| 嵊州市| 嘉善县| 阿坝| 三穗县| 项城市| 多伦县| 富民县| 肃北| 台中市| 阿荣旗| 成安县| 额济纳旗|