還不登入嗎?
(-3-)是不是要下跪求你們?
趕快為了可愛的管理員登入喔。
登入可以得到收藏功能列表
還能夠讓我們知道你們有在支持狂人喔(*´∀`)~♥
《讀書成神豪》第一百九十五章 IOCCC
“讀書成神豪 小說()”查找最新章節!
 章杉留意到《C專家編程》裡面提到了一個奇怪的大賽——國際C語言混亂代碼大賽。

 出門右拐度娘了一下:

 國際C語言混亂代碼大賽(,)是一項國際編程賽事,從1984年開始,每年舉辦一次(1997年、1999年、2002年、2003年和2006年例外)。目的是寫出最有創意的最讓人難以理解的C語言代碼。

 章杉:Σ(っ°Д°;)っ

 居然還特麽真的有這個比賽?而且還是國際編程賽事???

 是由藍登·克特·諾爾(LandonCurtNoll)與拉裡·貝索(LarryBassel)在1984年受雇於國家半導體()的Genix程序移殖事業群時開始的。比賽的點子是來自他們倆比較彼此有關於它們得修正的某些寫得很爛代碼的筆記。

 每年,的比賽規則會張貼在其網站上。規則每年不同,並且會隨附上一組的指導方針以試圖表達規則的精神。

 這些規則通常是蓄意書寫成文,伴隨著精巧的漏洞讓參賽者有所鼓勵去發現並濫用。

 嘖,雖然聽起來不太入流,但章杉覺得有必要還是可以參加一下的!

 趣味性十足有木有~

 書裡面倒也不全是有趣的東西,有些東西很沉重!

 在《C專家編程》這本書中,章杉看到了這樣一個例子:

 “1993年春天,在SunSoft的操作系統開發小組裡,我們(《C專家編程》作者)接到了一個“一級優先”的Bug報告,是一個關於異步IO庫的問題。

 如果這個Bug不解決,將會使一樁價值2000萬美元的硬件產品生意告吹,因為對方需要使用這個庫的功能。所以,我們頂著重壓尋找這個Bug。經過幾次緊張的調試,問題被圈定在下面這條語句上:

 x==2;

 這是個打字錯誤,它的原意是一條賦值語句。程序員的手指放在“=”鍵上,不小心多按了一下。

 這條語句成了將x與2進行比較,比較結果是true或者false,然後丟棄這個比較結果。”

 這個bug事件章杉看了也是感慨萬千!

 盡管《C專家編程》的作者在自說自話,但章杉也深有同感。

 不小心多打一個等號,手抖而已~

 誰又能100%保證不會犯類似的錯誤呢!

 說起來“=”和“==”這兩個雖然看起來區分不大,但這在C語言中全然是兩個不同的符號!

 在C語言中,最容易產生混淆的操作符要屬“=”與“==”。

 其中,“=”並不等於符號,而是賦值操作符,如x=3,意味著將3賦值給x。

 相對於只有一個等號的賦值操作符,關系操作符中的等於操作符采用兩個等號“==”來表示。

 正因如此,導致了一個潛在的問題:出於習慣,我們可能經常將需要等於操作符的地方寫成賦值操作符。

 或者將需要寫賦值運算符的地方不小心手賤多打一個“=”

 不得不說C語言的表達能力也實在是強,按照《C編程專家》一書中描述的情況,編譯器對於“求一個表達式的值,但不使用該值”這樣的語句竟然也能接受,並且不發出任何警告,只是簡單地把返回結果丟棄。

 而這種問題在實際編譯的情況下並不會報錯。

 只能慎重又慎重!

 說起來像書中所說的例子簡直是比較“溫柔的錯誤”了,有些和計算機錯誤相關聯的事故動輒就人命關天。

 章杉不止一次地聽計算機系的教授說過:

 在1991年2月的第一次海灣戰爭中,一枚伊拉克發射的飛毛腿導彈準確擊中美國在沙地阿拉伯的宰赫蘭基地,當場炸死28個美國士兵,炸傷100多人,造成美軍海灣戰爭中唯一一次傷亡超過百人的損失。

 在後來的調查中發現,由於一個簡單的計算機bug,使基地的愛國者反導彈系統失效,未能在空中攔截飛毛腿導彈。當時,負責防衛該基地的愛國者反導彈系統已經連續工作了100個小時,每工作一個小時,系統內的時鍾會有一個微小的毫秒級延遲,這就是這個失效悲劇的根源。愛國者反導彈系統的時鍾寄存器設計為24位,因而時間的精度也隻限於24位的精度。在長時間的工作後,這個微小的精度誤差被漸漸放大。在工作了100小時後,系統時間的延遲是三分之一秒。

 對一般人人來說,0.33秒是微不足道的。但是對一個需要跟蹤並摧毀一枚空中飛彈的雷達系統來說,這是災難性的——侯賽因飛毛腿導彈空速達4.2馬赫(每秒1.5公裡),這個”微不足道的”0.33秒相當於大約600米的誤差。在宰赫蘭導彈事件中,雷達在空中發現了導彈,但是由於時鍾誤差沒有能夠準確地跟蹤它,因此基地的反導彈並沒有發射。

 類似的事故還有1996年6月份的阿麗亞娜火箭事件。

 程序員在編程時必須定義程序用到的變量,以及這些變量所需的計算機內存,這些內存用比特位定義,一個16位的變量可以代表-32,768到32,767中間的值(這個數值的由來是2^15-1)。

 而一個64位的變量可以代表?9.223.372.036.854.775.808到9.223.372.036.854.775.807中間的值。

 1996年6月4日,阿麗亞娜5型運載火箭的首次發射點火後,火箭開始偏離路線,最終被逼引爆自毀,整個過程只有短短30秒。

 阿麗亞娜5型運載火箭基於前一代4型火箭開發。在4型火箭系統中,對一個水平速率的測量值使用了16位的變量及內存,因為在4型火箭系統中反覆驗證過,這一值不會超過16位的變量,而5型火箭的開發人員簡單複製了這部分程序,而沒有對新火箭進行數值的驗證,結果發生了致命的數值溢出。

 發射後這個64位帶小數點的變量被轉換成16位不帶小數點的變量, 引發了一系列的錯誤,從而影響了火箭上所有的計算機和硬件,癱瘓了整個系統,因而不得不選擇自毀,4億美金變成一個巨大的煙花。

 俱往矣!

 感慨之余,章杉及時在系統進行了結算:

 說起來雖然章杉讀書的速度很快,但還是用了3個小時才將這本書搞定!

 “叮~宿主共讀書3個小時,累計獲得金錢21600元,累計獲得43200經驗(含Ⅱ號徽章加成)”

 “另外宿主共閱讀43萬字,累計收獲43萬元軟妹幣~”

 “目前系統等級為12級,升級所需經驗為7,097,461204,800,000”為了方便下次閱讀,你可以點擊下方的"收藏"記錄本次(第196章 )閱讀記錄,下次打開書架即可看到!

喜歡《讀書成神豪》請向你的朋友(QQ、博客、微信等方式)推薦本書,謝謝您的支持!!()
鍵盤左右鍵 ← → 可以切換章節
章節問題回報:
翻譯有問題
章節內容不符
章節內容空白
章節內容殘缺
上下章節連動錯誤
小說很久沒更新了
章節顯示『本章節內容更新中』
其他訊息