Wie funktioniert dies?
-
Hallo zusammen. Also ich habe nur so zum Spass mal ein bischen C gelernt und bin dann im Internet auf folgendes gestossen:
#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]'/#{l,+'K {rw' iK{;[{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); }
Naja, und dieses Programm gibt doch tatsächlich einen Text auf der Konsole aus. Nun habe ich wieder mein Dummies-C Buch hervorgeholt, um zu verstehen, wie dieses Listing funktionieren könnte. Aber ich blicke einfach nicht durch! Selbst die Main Funktion überfordert mich! Könnte mich einer von meinem Leiden befreien oder ist das wirklich nur was für wahre C-Gurus?
Grüsse
-
ps:
Also mir ist aufgefallen, das sich die Main Funktion selbst aufruft. Also hat es wohl was mit Rekursion zu tun!
-
Kaktus schrieb:
Aber ich blicke einfach nicht durch! Selbst die Main Funktion überfordert mich! Könnte mich einer von meinem Leiden befreien oder ist das wirklich nur was für wahre C-Gurus?
Naja, sowas fällt unter die Rubrik "obfuscated code". Es gibt Leute, die machen sich einen Spass daraus, so unverständlichen und undurchsichtigen Code wie nur möglich zu schreiben. Für "normale" Programmierer sind das nichts weiter als sinnlose Spielereien. Man braucht deshalb auch nicht zu verstehen, wie das genau funktioniert. Willst du's doch, dann bleibt dir nichts anderes übrig, als den Code Schritt für Schritt aufzudröseln. IMO kannst du deine Zeit aber auch sinnvoller nutzen. Und um Vergleiche, den trinären Operator, Rekursion, etc zu verstehen, gibt es vernünftige Tutorials.