Ono sto je neocekivano u tom kodu je sto ljudi ne razlikuju teoriju od prakse. Naime, u teorijiu izmedju teorije i prakse nema razlike, ali u praksi i te kako ime.
Ajde da se malo poigramo sa nekim cudom kompajliranim kodom. Uradimo listu simbola tako kompajliranog programa.
Code:
[chupcko@main] 1 /home/chupcko > nm a
0000000000600e50 d _DYNAMIC
0000000000601000 d _GLOBAL_OFFSET_TABLE_
0000000000400818 R _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
w _Jv_RegisterClasses
0000000000600e30 d __CTOR_END__
0000000000600e28 d __CTOR_LIST__
0000000000600e40 D __DTOR_END__
0000000000600e38 d __DTOR_LIST__
0000000000400948 r __FRAME_END__
0000000000400824 r __GNU_EH_FRAME_HDR
0000000000600e48 d __JCR_END__
0000000000600e48 d __JCR_LIST__
0000000000601048 D __TMC_END__
0000000000601048 B __bss_start
0000000000601038 D __data_start
00000000004007d0 t __do_global_ctors_aux
0000000000400660 t __do_global_dtors_aux
0000000000601040 D __dso_handle
w __gmon_start__
0000000000600e28 d __init_array_end
0000000000600e28 d __init_array_start
00000000004007c0 T __libc_csu_fini
0000000000400750 T __libc_csu_init
U __libc_start_main@@GLIBC_2.2.5
0000000000601048 D _edata
0000000000601058 B _end
0000000000400808 T _fini
0000000000400510 T _init
00000000004005a0 T _start
0000000000601048 b completed.6955
0000000000601038 W data_start
00000000004005d0 t deregister_tm_clones
0000000000601050 b dtor_idx.6957
00000000004006d0 t frame_dummy
0000000000400700 T main
U putchar@@GLIBC_2.2.5
U rand@@GLIBC_2.2.5
0000000000400610 t register_tm_clones
U srand@@GLIBC_2.2.5
Sta mozemo videti, da je gomila funkcija definisano, ali ne i rand i srand. Koja naime pripadaju glibc-u. Dakle mozemo slobodno da tvrdimo da rand nije deo jezika nego standardne biblioteke. Samim tim cime god da kompajliras i ako ne menjas standardnu biblioteku davace isti kod.
A ako odemo jos korak dalje i vidimo da li je stdlib po POSIX.1-2001. A da kazemo da nema smisla ako nije :)))), onda cemo videti da se uvek isto implementira rand i srand.
Sve u svemu jos jedna neocekivana stvar je da ce na skoro svim linuxima, androidima, openwrtovima da da isti rezultat :). E sada i to mi je dovoljno :)))). Sve u svemu kod daje neocekivan rezultat, na prvu loptu, a kada razmislis shvatis da radi :)))).
Sve u svemu, jesam zajebant i znam da skolnim upozorenja, ali eto volem da imam u jednom redu potpis :).
P.S. Ideja je originalno moja. a program je sladak, pricali vi sta hocete :))))).
Code:
/**/main(e,c,h,o,_){e?(main(0,1,0,0,/**/
/**/3),puts("")):_--&&(main(e,c<<_,h/**/
/**/+3,o,_),putchar(223&2+"nimfs_a"[/**/
/**/(c&2)+h+o]),main(e,c,h,o+1,_));}/**/
CHUPCKO