转自 http://coolshell.cn/articles/914.html

下面的六个程序片段主要完成这些事情:

  1. 输出Hello, World
  2. 混乱C语言的源代码

下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。

(PS:main前的void是我加上的,VC编译通过)
1 、
#define  _________ }  
#define  ________ putchar 
#define  _______ void main  
#define  _(a) ________(a);  
#define  ______ _______(){  
#define  __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)  
#define  ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)  
#define  ____ _(0x72)_(0x6C)_(0x64)_(0x21)  
#define  _____ __ ___ ____ _________  
#include
< stdio.h >   
_____

2、(PS: 第一行的*z=(int*)&y; 原本是*z=&y;)
#include < stdio.h >   
main(){  
int  x = 0 ,y[ 14 ], * z = ( int * ) & y; * (z ++ ) = 0x48 ; * (z ++ ) = y[x ++ ] + 0x1D ;  
* (z ++ ) = y[x ++ ] + 0x07 ; * (z ++ ) = y[x ++ ] + 0x00 ; * (z ++ ) = y[x ++ ] + 0x03 ;  
* (z ++ ) = y[x ++ ] - 0x43 ; * (z ++ ) = y[x ++ ] - 0x0C ; * (z ++ ) = y[x ++ ] + 0x57 ;  
* (z ++ ) = y[x ++ ] - 0x08 ; * (z ++ ) = y[x ++ ] + 0x03 ; * (z ++ ) = y[x ++ ] - 0x06 ;  
* (z ++ ) = y[x ++ ] - 0x08 ; * (z ++ ) = y[x ++ ] - 0x43 ; * (z ++ ) = y[x] - 0x21 ;  
x
=* ( -- z); while (y[x] != NULL)putchar(y[x ++ ]);  
}

3、
#include < stdio.h >   
#define  __(a) goto a;  
#define  ___(a) putchar(a);  
#define  _(a,b) ___(a) __(b);  
void  main()  
{ _:__(t)a:_(
' r ' ,g)b:_( ' $ ' ,p)  
c:_(
' l ' ,f)d:_( '   ' ,s)e:_( ' a ' ,s)  
f:_(
' o ' ,q)g:_( ' l ' ,h)h:_( ' d ' ,n)  
i:_(
' e ' ,w)j:_( ' e ' ,x)k:_( ' \n ' ,z)  
l:_(
' H ' ,l)m:_( ' X ' ,i)n:_( ' ! ' ,k)  
o:_(
' z ' ,q)p:_( ' q ' ,b)q:_( ' , ' ,d)  
r:_(
' i ' ,l)s:_( ' w ' ,v)t:_( ' H ' ,j)  
u:_(
' a ' ,a)v:_( ' o ' ,a)w:_( ' ) ' ,k)  
x:_(
' l ' ,c)y:_( ' \t ' ,g)z:___( 0x0 )} 

4、
原本为:
int  n[] = { 0x48 ,  
0x65 , 0x6C , 0x6C ,  
0x6F , 0x2C , 0x20 ,  
0x77 , 0x6F , 0x72 ,  
0x6C , 0x64 , 0x21 ,  
0x0A , 0x00 }, * m = n;  
main(n){putchar 
(
* m) != ' \0 ' main  
(m
++ ):exit(n ++ );} 

修改后为
#include
< stdio.h >
#include 
< stdlib.h >
int  n[] = { 0x48 ,  
0x65 , 0x6C , 0x6C ,  
0x6F , 0x2C , 0x20 ,  
0x77 , 0x6F , 0x72 ,  
0x6C , 0x64 , 0x21 ,  
0x0A , 0x00 }, * m = n;  
void  mainO( int  n){putchar 
(
* m) != ' \0 ' ? mainO  
(
* m ++ ):exit(n ++ );} 
void  main()
{mainO(
0 );}

5、
#include  < stdio.h >
void  main(){ int  i,n[] = {((( 1 << 1 ) << ( 1 << 1 ) << ( 1 <<   
1 ) << ( 1 << ( 1 >> 1 ))) + (( 1 << 1 ) << ( 1 << 1 ))), ((( 1   
<< 1 ) << ( 1 << 1 ) << ( 1 << 1 ) << ( 1 << 1 )) - (( 1 << 1 ) << (  
1 << 1 ) << ( 1 << 1 )) + (( 1 << 1 ) << ( 1 << ( 1 >> 1 ))) +  ( 1   
<< ( 1 >> 1 ))),((( 1 << 1 ) << ( 1 << 1 ) << ( 1 << 1 ) <<  ( 1   
<< 1 )) - (( 1 << 1 ) << ( 1 << 1 ) << ( 1 << ( 1 >> 1 ))) -  (( 1   
<< 1 ) << ( 1 << ( 1 >> 1 )))),((( 1 << 1 ) << ( 1 << 1 ) << ( 1   
<< 1 ) << ( 1 << 1 )) - (( 1 << 1 ) << ( 1 << 1 ) << ( 1 << ( 1 >> 1   
)))
- (( 1 << 1 ) << ( 1 << ( 1 >> 1 )))),((( 1 << 1 ) <<  ( 1   
<< 1 ) << ( 1 << 1 ) << ( 1 << 1 )) - (( 1 << 1 ) << ( 1 << 1 ) << (  
1 << ( 1 >> 1 ))) - ( 1 << ( 1 >> 1 ))),((( 1 << 1 ) << ( 1 << 1   
)
<< ( 1 << 1 )) + (( 1 << 1 ) << ( 1 << 1 ) << ( 1 << ( 1 >> 1 )))  
- (( 1 << 1 ) << ( 1 << ( 1 >> 1 )))),(( 1 << 1 ) <<  ( 1 << 1 )  
<< ( 1 << 1 )),((( 1 << 1 ) << ( 1 << 1 ) << ( 1 << 1 ) << ( 1 <<   
1 )) - (( 1 << 1 ) << ( 1 << 1 )) - ( 1 << ( 1 >> 1 ))),((( 1 <<   
1 ) << ( 1 << 1 ) << ( 1 << 1 ) << ( 1 << 1 )) - (( 1 << 1 ) <<  ( 1   
<< 1 ) << ( 1 << ( 1 >> 1 ))) - ( 1 << ( 1 >> 1 ))), ((( 1 << 1   
)
<< ( 1 << 1 ) << ( 1 << 1 ) << ( 1 << 1 )) -  (( 1 << 1 ) <<  ( 1   
<< 1 ) << ( 1 << ( 1 >> 1 ))) + ( 1 << 1 )), ((( 1 << 1 ) <<  (  
1 << 1 ) << ( 1 << 1 ) <<  ( 1 << 1 )) - (( 1 << 1 ) <<  ( 1 << 1 )  
<< ( 1 << ( 1 >> 1 ))) - (( 1 << 1 << ( 1 <<  ( 1 >> 1 )))),  
(((
1 << 1 ) <<  ( 1 << 1 ) << ( 1 << 1 ) <<  ( 1 << 1 )) -  (( 1   
<< 1 ) << ( 1 << 1 ) << ( 1 << 1 )) + (( 1 << 1 ) <<  ( 1 << ( 1 >>   
1 )))), ((( 1 << 1 ) << ( 1 << 1 << ( 1 << 1 )) + ( 1 << ( 1   
>> 1 ))),((( 1 << 1 ) << ( 1 << 1 )) + (( 1 << 1 ) <<  ( 1 << (  
1 >> 1 )))  +  ( 1 <<  ( 1 >> 1 )))};  for (i = ( 1 >> 1 );i  
< ((( 1 << 1 << ( 1 << 1 )) + (( 1   << 1 ) <<  ( 1 << ( 1 >> 1   
))) 
+  ( 1 << 1 )); i ++ ) printf( " %c " ,n[i]); }

6、下面的程序只能由C++的编译器编译(比如:g++)
#include  < stdio.h >   
#define  _(_) putchar(_);  
int  main( void ){ int  i  =   0 ;_(  
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++ i)_( ++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++++++++ i)_( ++++++++++++++   
i)_(
--++ i)_( ++++++ i)_( ------   
----------------------------   
----------------------------   
----------------------------   
----------------------------   
---------------- i)_( --------   
---------------- i)_( ++++++++   
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++++   
++++++++++++++++++++++++++ i)  
_(
---------------- i)_( ++++++   
i)_(
------------ i)_( --------   
-------- i)_( ----------------   
----------------------------   
----------------------------   
----------------------------   
----------------------------   
------ i)_( ------------------   
----------------------------   
i)
return  i;}