國際混亂 C 代碼大賽(IOCCC,International Obfuscated C Code Contest)是程式設計界最獨特的比賽之一:比拚的不是演算法效率,而是代碼有多難讀、多扭曲、多像亂碼。這項賽事已舉辦超過 30 年,產出無數令人嘆為觀止的「藝術品」。
看看這段獲獎代碼,乍看全是亂碼,編譯執行後竟能輸出一長段源碼中完全不存在的文字:
#include <stdio.h>
main(t,_,a)
char *a;
{
return!0<t?t<3?main(-79,-13,a+main(-87,1-_,main(-86,0,a+1)+a)):
1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
){nl]!/n{n#'; r{#w'r nc{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*#nc,'#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')#\
}'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
:0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);
}
這段代碼極度壓縮、大量遞迴、字串編碼技巧,展示了 C 語言語法的極限彈性。
官網 https://www.au.ioccc.org/years.html 收錄所有歷屆作品,但多數需 Linux 環境。以下精選幾個在 Windows (假設編譯為 abc.exe) 即可運行的趣味作品:
指令: abc "ash nazg durhbatuluhk, ash nazg gimbatul, ash nazg thrakatuluhk, agh burzhumh-ishi krimpatul." > abc.pgm
用圖片檢視器開啟 abc.pgm,會看到驚喜畫面。代碼極度混淆,充滿宏定義與位運算。
指令: abc > ioccc_ray.ppm (需等待片刻)
生成一張光線追蹤渲染的圖片,代碼僅百餘行卻實現完整渲染管線,極度精簡。
指令: abc 0 0 1 繪製 y=x²;abc -1 0 0 1 繪製 y=x³-1
利用終端機字元繪製函數圖像,參數調整可繪製任意多項式。
指令: abc 01524157875019052100
輸入偶數位數字(奇數位需補前導 0),輸出其平方根,精度極高,曾發表於 OIBH。
無需參數直接執行,利用數學公式在終端機繪製帶陰影的月亮,代碼極短卻效果逼真。
預載單字庫,互動式猜字遊戲,代碼結構極度混亂,大量運用宏與條件編譯技巧。
IOCCC 不只是惡搞,它倒逼開發者深入理解:
這些作品雖不宜用於生產環境,卻是理解 C 語言底層機制的最佳教材。嘗試閱讀並解析它們,能大幅提升你的 C 語言駕馭能力。