從前有隻壞豬提示您:看後求收藏(第195章 IOCCC,讀書成神豪,從前有隻壞豬,大文學小說網),接著再看更方便。

請關閉瀏覽器的閱讀/暢讀/小說模式並且關閉廣告遮蔽過濾功能,避免出現內容無法顯示或者段落錯亂。

章杉留意到《c專家程式設計》裡面提到了一個奇怪的大賽——國際c語言混亂程式碼大賽。

出門右拐度娘了一下

國際netternationa1obfusnettest)是一項國際程式設計賽事,從1984年開始,每年舉辦一次(1997年、1999年、2oo2年、2oo3年和2oo6年例外)。目的是寫出最有創意的最讓人難以理解的c語言程式碼。

章杉Σっ°Д°;っ

居然還特麼真的有這個比賽?而且還是國際程式設計賽事???

Ionetneto11)與拉里·貝索(LarryBasse1)在1984年受僱於國家半導體(nationa1seminetix程式移殖事業群時開始的。比賽的點子是來自他們倆比較彼此有關於它們得修正的某些寫得很爛程式碼的筆記。

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

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

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

趣味性十足有木有~

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

在《c專家程式設計》這本書中,章杉看到了這樣一個例子

“1993年春天,在sunsoft的作業系統開小組裡,我們(《c專家程式設計》作者)接到了一個“一級優先”的Bug報告,是一個關於非同步Io庫的問題。

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

x==2;

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

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

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

儘管《c專家程式設計》的作者在自說自話,但章杉也深有同感。

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

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

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

在c語言中,最容易產生混淆的運算子要屬“=”與“==”。

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

相對於只有一個等號的賦值運算子,關係運算子中的等於運算子采用兩個等號“==”來表示。

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

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

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

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

只能慎重又慎重!

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

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

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

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

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

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

程式設計師在程式設計時必須定義程式用到的變數,以及這些變數所需的計算機記憶體,這些記憶體用位元位定義,一個16位的變數可以代表-32,768到32,767中間的值(這個數值的由來是2^15-1)。

而一個64位的變數可以代表?9.223.372.o36.854.775.8o8到9.223.372.o36.854.775.8o7中間的值。

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

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

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

俱往矣!

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

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

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

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

“目前系統等級為12級,升級所需經驗為7,o97,,8oo,ooo”

喜歡讀書成神豪請大家收藏讀書成神豪本站更新度全網最快。

本章未完,點選下一頁繼續閱讀。

都市小說相關閱讀More+

四合院:重生傻柱調教眾禽獸

土豆燒辣椒

全球戰國

混吃等死

重生蜈蚣:進化神龍!

伏念抱琴

他很野

田園泡

怦然為你

閔然

娶1送2:全球緝拿少夫人

度寒