Развлекаемся, «распутывая» код на языке Си
Вызов: Прежде чем лезть под кат, скомпилируйте в голове заголовок статьи, что он дает на выходе?
![main(){printf(&unix["-021%six-012-0"], (unix)[«have»]+«fun»-0x60);} - 1 image](https://www.pvsm.ru/images/2016/10/28/main-printf-unix-quot-021-six-012-0-quot--unix-have-fun-0x60.jpg)
Когда я в очередной раз просматривал книгу «Expert C programming», я вдруг наткнулся на раздел «light relief» в международном конкурсе на самый запутанный код на Си (IOCCC). Это соревнование по написанию как можно более нечитабельного кода. То, что такие конкурсы устраиваются для Си, наверное, говорит что-что об этом языке. Мне хотелось увидеть работы участников этого соревнования. Не найдя никакой информации в интернете, я решил поискать их самостоятельно.
IOCCC был придуман Стивеном Борном, когда он решил использовать препроцессор Си и написать Unix shell как бы на языке Си, но больше похожем на язык Algol-68, с его явными окончаниями операторов, например:
if
...
fi
Он добился этого, сделав:
#define IF if(
#define THEN ){
#define ELSE } else {
#define FI ;}
Что позволило ему писать так:
IF *s2++ == 0
THEN return(0);
FI