Hogyan tegyünk olvashatatlanná C kódot?

 ( Botond | 2008. október 15., szerda - 17:41 )

Sziasztok!

Egyszer régebben olvastam egy humoros (angol nyelvű) írást arról, hogyan lehet olvashatatlan C kódot készíteni. Több buta szabály volt fölsorolva, többek közt valami olyasmi, hogy "használjunk egybetűs változó neveket".
Nem emlékszik valaki ilyesmire? Nem tudnátok linket adni rá, vagy valami támpontot, ami alapján magam is megtalálnám?
Előre is köszi!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

http://www.ioccc.org/
Tanulmányozd az innen elérhető kódot és meríts ihletet.

chmod?

Rakj bele jó sok goto-t. Én régebben ifjú titán koromban előszeretettel használtam, aztán most el kezdtem nézegetni azokat a kódokat. Még jó hogy én irtam :D

Esetleg ez:

http://mindprod.com/jgloss/unmain.html

"Hogy irjunk karbantarthatatlan kodot"

Köszi, valószínűleg ezt olvastam. Illetve azon belül is ezt: http://mindprod.com/jgloss/unmainnaming.html
És rosszul emlékeztem, mert nem C, hanem Java tanácsok.

Még most is elröhögtem magam rajta. Köszi!

(Szerk:
Ja, ez az. Erre is emlékszem:
Hungarian Notation is the tactical nuclear weapon of source code obfuscation techniques; use it! ... Consider this real world example: "a_crszkvc30LastNameCol". It took a team of maintenance engineers nearly 3 days to figure out that this whopper variable name described a const, reference, function argument that was holding information from a database column of type Varchar[30] named "LastName" which was part of the table’s primary key. When properly combined with the principle that "all variables should be public" this technique has the power to render thousands of lines of source code obsolete instantly! )

Habár jómagam személyesen nem jártam utána, egyesek szerint a "Hungarian Notation"-t az egész világ félreértelmezi, lásd Joel cikke (kötelező olvasmány mindenkinek), aminek ha lehet hinni, akkor ez egy igenis nagyon-nagyon hasznos dolog jól olvasható és jó minőségű kód írásához. Tehát ha szar kódot akarsz írni, akkor a helyes értelmezést érdemes tudatosan elkerülni. :)

Figyu, ez humor! Az említett példa kicsit erőltetett, de azért jót derültünk rajta.
A gyakorlatban magam is használom a magyar jelölésmódot (sőt pl. ők is), de eddig 4 betű volt a legtöbb, amit típusmegjelölésre használtam (nem a Win32-féle "lpsz" volt), és a 3 is már ritkának számít.

Nem hiszem, hogy rosszul emlékszel, mert van ebből C-s verzió is, és az tuti régebbi mint a Java-s.

Onnan lehet ez ismerős, hogy a C-ből sok ötletet fel lehet használni Java-ban.

Én viszont emlékszem olyan tippre, ami Java-ban nem működik:

int m[23];
// később
int i=5;
// még később
c=i[m];

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Nekem ez tetszett nagyon:

typedef* struct* { int* i; } ínt;

hogy "használjunk egybetűs változó neveket".
_ vagy $ mint valtozone'v. Inkabb _.

ala prototype, jQuery, etc. :)
mar ha a fuggveny/osztalynev is er. :)

Tyrael

_ foglalt (gettext).
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Pont ez a lényeg.

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

Az MPlayer kód neked referencia lehet.

A vim-hoz a /usr/share/vim...-ben szokott lenni egy vi macro-ban irt vizualis (labirintus) utkereso pelda. Ennek van egy maze.c labirintus generalo file-ja. Nagy elmeny. A vi makro se piskota mukodes kozben, bar itt epp offtopic.

Valahol volt egy tetris jatek, az include sorok utan volt meg egy sor, az volt maga a jatek.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Egy main() és egy egyéb függvény? Wirth is megmondta, hogy az a program, ami több, mint 15 sor, az nem jó.
--
unix -- több, mint kód. filozófia.
Life is feudal

Az alábbi egysoros ugyan nem C, de azért érdekes:


signal=(interpret=value);value=(interpret lt parse);do upper=value to value end;exit=upper*upper*upper*upper-value-upper;say=' ';return=say say say; with.=signal;;do then=value to exit;pull='';do otherwise=upper to then-, value;select=otherwise-value; if.otherwise=with.otherwise+with.select;end if.value=value;if.then=value;;do otherwise=value to exit-then;pull=pull, say''say;;end;do otherwise=value to then;pull=pull center(if.otherwise,, length(return));end;say pull;do otherwise=value to exit;with.otherwise=, if.otherwise;end;end;exit

A nyelv REXX és ha jól tudom, az eredeti még FORTRAN volt.

Ha valaki ránézésre megmondja, hogy mit csinál, annak le a kalappal!

Az elején az "lt" valójában a kisebb-jel, csak nem tudtam, hogy írjam be.

A formaja ronda ;)
Itt szebbek/szellemesebbek vannak, bar ez meg perl:
http://www.perlmonks.org/?node=Obfuscated%20Code

egy kis shell, ugyan nem egysoros:

                                      l="x"
                                    for k in \
                                `seq 16`;do for \
                               s in $l;do echo -n  \
                             `echo  -n $s | wc -c`" "
                           done; echo; n=;p=;for i in $l
                       do n=$n\ $p$i;p=$i;done;l=$n\ x; done

Szintaktikailag egy sor, de ugye nem ez számít, amikor az ember kódot olvas.
--
unix -- több, mint kód. filozófia.
Life is feudal

Az olvashatóság szempontjából ez is számít.
A void main() {printf("hello!\n");return 0;} féle egysorost minden nyelven lehet írni, de mindig ront az olvashatóságon.

Egy main() fgv. volt az egesz, ha jol emlexem.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

És ez annak, aki szereti a "rövid kihívásokat" C-ben.