转自 http://coolshell.cn/articles/914.html
下面的六个程序片段主要完成这些事情:
- 输出Hello, World
- 混乱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 >
_____
#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 ++ ]);
}
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 )}
#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 );}
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]); }
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;}
#define _(_) putchar(_);
int main( void ){ int i = 0 ;_(
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++ i)_( ++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++ i)_( ++++++++++++++
i)_( --++ i)_( ++++++ i)_( ------
----------------------------
----------------------------
----------------------------
----------------------------
---------------- i)_( --------
---------------- i)_( ++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++ i)
_( ---------------- i)_( ++++++
i)_( ------------ i)_( --------
-------- i)_( ----------------
----------------------------
----------------------------
----------------------------
----------------------------
------ i)_( ------------------
----------------------------
i) return i;}