main() { printf(&unix["\021%six\012\0"], (unix)["have"] + "fun" -

这是我在网上发现的一个程序, 据说是美国最“怪”C程序大赛的获奖程序 .
大家试一试看看是什么结果?能看出什么门道吗?
---------------------------------------------------------------

环境:
SunOS 5.8 Generic_108528-01 sun4u sparc SUNW,Ultra-5_10
gcc version 2.95.2 19991024 (release)
结果:
unix

首先,unix预编译后会被替换成1(gcc -E);
其次,1["string"]等同于"string"[1], 有意思
---------------------------------------------------------------

结果就是"unix"!
关键就在unix == 1上,如果知道了这个就不难理解了。

---------------------------------------------------------------

1、这关键是看读者是对UNIX下编译器的熟悉程度 即使讲明了
MACRO unix = 1,恐怕都没有几个人可以找到在哪里定义的。

2、另一个就是对数组的理解.1["abcd"] <==> "abcd"[1]
也就是'b'
&1["abcd"]就是'b'的地址
"abcd"与char str[] = "abcd"效果是一样的,编译的时候都会当作局部数据。

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus