(IOCCC, The International Obfuscated C Code Contest)是一項國際編程賽事,從1984年開始,每年舉辦一次(1997年、1999年、2002年、2003年和2006年例外)。目的是寫出最有創意的最讓人難以理解的C語言代碼。
作品從線上提交,並經過好幾回合的裁判的審核。作品審核是基於濫用混亂代碼的程度(以及創造性的濫用)。作品通過最後一輪審核的會被歸成其特別的一類以示嘉獎,例如“最濫用C前處理器”或者“最古怪的行為”,並且發表在官方IOCCC網站。作品沒有通過者會被刪除或遺忘;該賽事主辦聲明:作品被宣告在IOCCC網站是競賽的錦標。
歷史
IOCCC是由藍登·克特·諾爾(Landon Curt Noll)與拉里·貝索(Larry Bassel)在1984年受僱於國家半導體(National Semiconductor)的Genix程式移殖事業群時開始的。比賽的點子是來自他們倆比較彼此有關於它們得修正的某些寫得很爛代碼的筆記。
規則
每年,IOCCC的比賽規則會張貼在其網站上。規則每年不同,並且會隨附上一組的指導方針以試圖表達規則的精神。這些規則通常是蓄意書寫成文,伴隨著精巧的漏洞讓參賽者有所鼓勵去發現並濫用。比賽結果就是“軟體開發過程的諷刺體”。作品占某些規則裡頭的漏洞之便者(不管它是否通過最後一輪審核)會造成下年度比賽規則的調整(雖然常常其他微妙的漏洞會又被裁判存心放水)。
被使用過的混亂規則
因為該賽事的本質,作品通常動用奇怪或者不尋常的語法竅門,如利用C前處理器去做它設計來不該做的事、或者避免C程式語言正常使用的建構式,以利於更曖昧難解的方式來達到同樣的事。舉例來說,下面是2004年得獎作品裡的引言:為了要讓事情簡單點,我得避免 C 前處理器以及刁鑽的敘述如“if”、“for”、“do”、“while”、“switch”、以及“goto”。 我們不還是不太確定這是個有用的程式,不過這是 IOCCC 首見的核裂變反應。 為何不用程式來把另一段程式藏在程式中?這鐵定在當下來看相當合理[5]。 該程式在C前處理器里實現了11位元的算數邏輯單元。 我發現計算從1到1024間的質數程式讓它自己包括自己超過6百50萬次。 許多卓著的貢獻包括:
可能排成圖形、文字等等的代碼外觀,像是ASCII藝術。 前處理器重定義讓代碼難以閱讀。 自我修改代碼。 最大限度濫用規則。許多年來,某些參賽作品如此公然繆用規則導致IOCCC需要於下年度重新定義某些規則。不容置疑的這是一種高度榮譽。一個範例是世界最短的自我繁殖程式。該作品是為零位元長度的程式,如果執行列印零位元到螢幕上 (這需要某具有創造力的對makefile套用才能讓它執行正確)[7]。 本競賽有著自然而然在 C 語言標準規範邊際遊走的編程本質,或者觸發極少用到的編譯器編譯後代碼路徑。這導致許多過去的作品可能無法直接通過當代編譯器,並且某些可能甚至造成該程式崩潰。