IOCCC.1984.anonymous.c.解析

anonymous.c:
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\ o,
world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}

http://ioccc.org/years.html#1984

整理一下:

int i;
main(){
    for(;i["]<i;++i){--i;}"];)
        read('-'-'-',i+++"hell\
o, world!\n",'/'/'/');
}

read(j,i,p){
    write(j/p+p,i---j,i/i);
}
  • i+++被解析爲i++ +
  • i["]<i;++i){--i;}"]相當於"]<i;++i){--i;}"[i] 由於每次i增1,該表達式作爲for語句的條件即爲“當"]<i;++i){--i;}"[i]不爲'\0' 時循環,在字符串常量結尾會有'\0' 因此條件相當於i<=14
  • '-'-'-''/'/'/' char提升爲int直接運算爲0和1
int i;
main(){
    for(;i<=14;i++)
        read(0,i+"hell\
o, world!\n",1);
}

read(j,i,p){
    write(j/p+p,i---j,i/i);
}
  • 傳入read()函數的j和p始終爲0和1
  • 將read()函數之間帶入main()
int i;
main(){
    for(;i<=14;i++)
        write(1,i+"hell\
o, world!\n",1);
}
  • 取消轉義換行

最終:

int i;
main(){
    for(;i<=14;i++)
        write(1,i+"hello, world!\n",1);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章