日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《C专家编程》一1.6 它很棒,但它符合标准吗

發布時間:2023/11/29 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《C专家编程》一1.6 它很棒,但它符合标准吗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節書摘來自異步社區《C專家編程》一書中的第1章,第1.6節,作者 【美】Perter Van Der Linde,更多章節內容可以訪問云棲社區“異步社區”公眾號查看

1.6 它很棒,但它符合標準嗎

不要添亂——立即解散ISO工作小組。

——匿名人士

ANSI C標準可以說是非常獨特的,我們可以從好幾個有趣的方面來說明這一點。它定義了下面一些術語,用于描述某種編譯器的特點。如果你對這些術語有一個比較好的了解,就有助于你理解什么東西能被語言接受,什么東西不能被語言接受。前兩個術語涉及不可移植的代碼(unportable code),接下來的兩個術語跟壞代碼(bad code)有關,而最后兩個術語則跟可移植的代碼(portable code)有關。

不可移植的代碼(unportable code):

由編譯器定義的(implementation-defined)——由編譯器設計者決定采取何種行動(就是說,在不同的編譯器中所采取的行為可能并不相同,但它們都是正確的),并作好文檔記錄。

例如:當整型數向右移位時,要不要擴展符號位。

未確定的(unspecified)——在某些正確情況下的做法,標準并未明確規定應該怎樣做。

例如:參數求值的順序。

壞代碼(bad code):

未定義的(undefined)——在某些不正確情況下的做法,但標準并未規定應該怎樣做。你可以采取任何行動,可以什么也不做,也可以發出一條警告信息,或者可以中止程序以及讓CPU陷入癱瘓,甚至可以發射核導彈(只要你安裝了能發射核彈的硬件系統)。

例如:當一個有符號整數溢出時該采取什么行動。

約束條件(a constraint)——這是一個必須遵守的限制或要求。如果你不遵守,那么你的程序的行為就會變成像上面所說的屬于未定義的。這就出現了一種很有意思的情況:分辨某種東西是否是一個約束條件是很容易的,因為標準的每個主題都附有一個“約束(constraint)”小節,列出了所有的約束條件。現在又出現了一個更為有趣的情況:標準規定[5]編譯器只有在違反語法規則和約束條件的情況下才能產生錯誤信息!這意味著所有不屬于約束條件的語義規則你都可以不遵循,而且由于這種行為屬于未定義行為,編譯器可以采取任何行動,甚至不必通知你!

例如:%操作符的操作數必須屬于整型。所以,在非整數數據上使用%操作符肯定會引發一條錯誤信息。

不屬于約束條件規則的例子:所有在C語言標準頭文件中聲明的標識符均保留,所以不能聲明一個叫作malloc()的函數,因為在標準頭文件里已經有一個函數以此為名。但由于這個規定不是約束條件,因此可以違反它,而且編譯器甚至可以不警告你!關于“interpositioning”這一小節的更多內容,參見第5章。



未定義的行為在IBM PC中引起CPU癱瘓!

未定義的軟件行為引起CPU癱瘓的說法并不像它乍聽上去那樣牽強。

IBM PC的顯示器以顯示控制芯片所提供的水平掃描速率工作。回掃變壓器(flyback transformer,一種產生高電壓的裝置,用于加速電子以點亮顯示器上的熒光物質)需要保持一個合理的頻率。

然而在軟件中,程序員有可能把視頻芯片的掃描速率設置成零,這樣就會產生一個恒定的電壓輸出到回歸變壓器的輸入端。這就使它起了電阻器的作用,只是把電能轉換成熱能,而不是傳送到屏幕。這會在數秒之內就把顯示器燒毀,那就是未定義的軟件行為會導致系統癱瘓的理由。
可移植的代碼(portable code):

嚴格遵循標準的(strictly-conforming)—— 一個嚴格遵循標準的程序應該是:

只使用已確定的特性。

不突破任何由編譯器實現的限制。

不產生任何依賴由編譯器定義的或未確定的或未定義的特性的輸出。

這樣規定的主要目的就是最大限度地保證可移植性。這樣,不論你在什么平臺上運行嚴格遵循標準的程序都會產生相同的輸出。事實上,在所有遵循標準的程序中,屬于這一類的程序并不多。例如,下面這個程序就不是嚴格遵循標準的:

#include <limits.h> #include <stdio.h> int main() { (void)printf("biggest int is %d", INT_MAX); return 0;}/*并不嚴格遵循標準:其輸出結果是由編譯器定義的。*/

在本書的剩余部分,我們通常并不強求例子程序嚴格遵循標準。因為如果這樣做會使文本看上去比較亂,而且不利于理解所討論的要點。程序的可移植性是非常重要的,所以在你的現實編碼中,應該始終要保證加上必要的類型轉換、返回值等。

遵循標準的(conforming)——一個遵循標準的程序可以依賴一些某種編譯器特有的不可移植的特性。所以,一個程序有可能在一個特定的編譯器里是遵循標準的,但在另一個編譯器里卻是不遵循標準的。它可以進行擴展,但這些擴展不能修改嚴格遵循標準的程序的行為。但是,這個規則并不是一個約束條件,所以對于你的程序中不遵循標準之處,你不要指望編譯器會給出一條警告信息指出你違反了規定!

上面所舉的幾個程序實例都是遵循標準的。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的《C专家编程》一1.6 它很棒,但它符合标准吗的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: jizz黑人| 大度亲吻原声视频在线观看 | 日韩欧美一区二区三区四区五区 | 西西毛片 | 欧美操穴视频 | 色播放| 无码国模国产在线观看 | 仙踪林久久久久久久999 | 草草久久久无码国产专区 | 久久国产传媒 | 毛片网站网址 | www精品| 欧美大胆a视频 | 亚洲成人免费网站 | 男ji大巴进入女人视频 | 久久免费少妇高潮99精品 | 色多多入口 | 久久av高潮av| 天天摸夜夜爽 | 人妻丝袜一区 | 欧美a级片视频 | 超碰下载页面 | 午夜精品免费 | 中文字幕不卡一区 | 欧美做受高潮中文字幕 | 国产二区三区 | 超碰免费在线播放 | 四虎影视在线播放 | av网站国产 | 免费av电影网站 | 亚洲久久一区 | 日韩一级欧美 | 日本在线视频免费观看 | 大肉大捧一进一出好爽视频 | 狠狠干b | 人体内射精一区二区三区 | 日韩精品极品视频 | 日韩 在线 | 国产69精品麻豆 | 在线看黄网址 | 免费黄色在线观看 | 日本网站在线播放 | 亚洲天堂aaa| 一级黄色片在线免费观看 | 小早川怜子一区二区三区 | 欧美精品一区在线 | 日韩在线精品视频 | 毛片网站免费 | av污| 爱情岛亚洲论坛入口 | 曰批又黄又爽免费视频 | 中文字幕日韩一区二区三区不卡 | 国产精品日本 | 亚洲一区综合 | 欧美一级大片 | 天天躁日日躁狠狠躁av | 一本色道久久hezyo无码 | 秋霞二区 | xxxxwww国产| 色综合久久久无码中文字幕波多 | 丝袜国产视频 | 亚洲一区欧美一区 | 奇米四色在线观看 | 少妇大叫太粗太大爽一区二区 | 青青草久久伊人 | 亚洲h在线观看 | 久久激情综合 | 久热av在线 | 欧美日韩三 | 亚洲天堂av免费在线观看 | 老司机深夜福利影院 | 99久久人妻无码精品系列 | 久久久久久av无码免费看大片 | 视频在线观看一区 | 欧美成人免费高清视频 | 欧亚成人av | 一级黄色录相 | 亚洲成人第一区 | 国产一级做a爰片久久毛片男 | 理论片琪琪午夜电影 | 国产免费一区二区三区最新不卡 | 亚洲精品第一 | 综合五月婷婷 | 蜜乳av一区 | 假日游船| 伦理片一区二区三区 | 国产一区二区视频免费在线观看 | 深爱激情丁香 | 67194午夜 | 日本大尺度吃奶做爰久久久绯色 | 奇米影视狠狠干 | 天天躁日日躁狠狠躁免费麻豆 | 中文字幕性 | 在线免费看黄色片 | 人人妻人人澡人人爽 | 日韩色一区 | 免费毛片软件 | 欧美图片一区二区 | 被黑人猛躁10次高潮视频 |