weird code!!!

K

kukie007

please can ayone explain this code to me!! it gives a poem as an
output!!

#include <stdio.h>
main(int t,char _,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;# ){n\
l]!/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(a[31]):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);}
 
G

Guest

kukie007 said:
please can ayone explain this code to me!! it gives a poem as an
output!!

#include <stdio.h>
main(int t,char _,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;# ){n\
l]!/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(a[31]):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);}

It doesn't even compile.

$ gcc test.c -o test
test.c: In function ‘main’:
test.c:7: error: missing terminating " character
test.c:11: error: ‘iwk’ undeclared (first use in this function)
test.c:11: error: (Each undeclared identifier is reported only once
test.c:11: error: for each function it appears in.)
test.c:11: error: expected ‘)’ before ‘{’ token
test.c:11:16: warning: character constant too long for its type
test.c:11:32: warning: character constant too long for its type
test.c:11:43: warning: character constant too long for its type
test.c:12:6: warning: character constant too long for its type
test.c:11: error: stray ‘##’ in program
test.c:12:20: warning: character constant too long for its type
test.c:11: error: stray ‘#’ in program
test.c:12:33: warning: multi-character character constant
test.c:11: error: stray ‘#’ in program
test.c:13:2: warning: character constant too long for its type
test.c:13:15: warning: character constant too long for its type
test.c:11: error: stray ‘#’ in program
test.c:11: error: expected ‘:’ before ‘}’ token
test.c: At top level:
test.c:11: error: missing terminating ' character
test.c:14: error: expected identifier or ‘(’ before ‘?’ token
test.c:14: error: expected identifier or ‘(’ before ‘}’ token
$ icc test.c -o test
test.c(7): error: missing closing quote
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
^

test.c(11): error: expected a ")"
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
^

test.c(11): warning #26: too many characters in character constant
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
^

test.c(11): warning #26: too many characters in character constant
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
^

test.c(11): warning #26: too many characters in character constant
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
^

test.c(12): warning #26: too many characters in character constant
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
^

test.c(12): error: "#" not expected here
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
^

test.c(12): error: "#" not expected here
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
^

test.c(12): warning #26: too many characters in character constant
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
^

test.c(12): error: "#" not expected here
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
^

test.c(13): error: "#" not expected here
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") :t<-50?_==*a
^

test.c(13): warning #26: too many characters in character constant
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") :t<-50?_==*a
^

test.c(13): warning #26: too many characters in character constant
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") :t<-50?_==*a
^

test.c(13): error: "#" not expected here
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") :t<-50?_==*a
^

test.c(13): error: missing closing quote
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/") :t<-50?_==*a
^

test.c(16): warning #12: parsing restarts here after previous syntax
error

test.c(16): error: expected a ":"

test.c(16): error: expected a ":"

test.c(16): error: expected a ";"

test.c(16): error: expected a "}"

compilation aborted for test.c (code 2)

And that's without the standard's required diagnostics and other
generally useful warnings. I can get more complaints from my compilers
if I enable them.
 
F

Franchie

please can ayone explain this code to me!! it gives a poem as an
output!!

The output has obviously been modified from the original version,
possibly as a result of posting it via the web (and character filter,
etc).
Thus the failure to compile...
How does it work? Some insanely clever person must have gone through
the whole poem, spotting patterns and making recursive calls to main to
place the characters in the right order. The fact that the verses
repeat helps a lot.
This example was taken from a c textbook, I forget the name...
Incidentally, to make this on-topic, I strongly suspect that this is
not standard-c, especially the main: int main(t,_,a).
Though given that (it works), I'm not quite sure what the '_' does...

In any case, amusing but of little practical use, unless you really
need to reuse memory!
F.
 
J

Jens Thoms Toerring

The output has obviously been modified from the original version,
possibly as a result of posting it via the web (and character filter,
etc).
Thus the failure to compile...
How does it work? Some insanely clever person must have gone through
the whole poem, spotting patterns and making recursive calls to main to
place the characters in the right order. The fact that the verses
repeat helps a lot.
This example was taken from a c textbook, I forget the name...

Originally, it was one of the winning entries in the Obfuscated C
Contest, see

http://www.de.ioccc.org/

The code listing (working) is even on wikipedia

http://en.wikipedia.org/wiki/Obfuscated_code

I don't remember from which year it was but you will probably have
some fun browsing through them;-) And figuring out how they work is
considered part of the fun.
Incidentally, to make this on-topic, I strongly suspect that this is
not standard-c, especially the main: int main(t,_,a).

No, it isn't, but ANSI C compliance isn't a very high priority in
the OCC.
Though given that (it works), I'm not quite sure what the '_' does...

It's a valid variable name - variables names must start with a
letter or an underscore and they don't need more than a single
character.
Regards, Jens
 
F

Franchie

It's a valid variable name - variables names must start with a
letter or an underscore and they don't need more than a single
character.

Thats amazing!
But what about the three-part main() ?
How does that compile? Its great when used as a function, but how about
the original entry-point?
Thanks!

F.
 
J

Jens Thoms Toerring

Franchie said:
But what about the three-part main() ?
How does that compile? Its great when used as a function, but how about
the original entry-point?

Some implementations allow you to call main() with a third argument,
set up as a pointer to another array of strings containing the envi-
ronment variables as key=value pairs and ended by a NULL pointer. So
on such a system you can do e.g.

#include <stdio.h>

int main( int argc, char *argv[ ], char *env[ ] )
{
size_t i = 0;
while ( env[ i ] )
puts( env[ i++ ] );
return 0;
}

to output the environment the program was invoked with.

Regards, Jens
 
K

Keith Thompson

No, it isn't, but ANSI C compliance isn't a very high priority in
the OCC.

It's not portable, but it's legal (there's no syntax error or
constraint violation) The standard explicitly allows implementations
to support extensions, as long as they don't change the behavior of
any strictly conforming program.

And the IOCCC rules have changed over the years. I'm not sure what
they are now, but standard compliance has become more important.
(That still leaves room for some impressive obfuscation.)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top