C语言神奇的经典程序

因为C语言语法格式的特殊性,还诞生了一个C语言乱码大赛,从1984年开始,一直办到现在。在它官网上能看到历年所有的参赛获奖的作品。

官网链接:

  • https://www.ioccc.org
  • https://github.com/ioccc-src/temp-test-ioccc

这个比赛的目的不是写出最好看,最易懂的代码,而是比赛写出最有创意的最让人难以理解的,最难看懂的C语言代码。

一、作品赏析(1)

比如下面这个经典的获奖作品:

#include <stdio.h> char* a; main(int t, int _, 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);}

第一眼看上去,这啥嘛,能运行吗?它还真能运行(记得代码保存格式要以.c结尾),输出了这一堆英文:

翻译一下会发现这竟然还是一首写的不错的诗:

On the first day of Christmas my true love gave to me

a partridge in a pear tree.

On the second day of Christmas my true love gave to me

two turtle doves

and a partridge in a pear tree.

On the third day of Christmas my true love gave to me

three french hens, two turtle doves

and a partridge in a pear tree.

On the fourth day of Christmas my true love gave to me

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

On the fifth day of Christmas my true love gave to me

five gold rings;

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

On the sixth day of Christmas my true love gave to me

six geese a-laying, five gold rings;

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

On the seventh day of Christmas my true love gave to me

seven swans a-swimming,

six geese a-laying, five gold rings;

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

On the eigth day of Christmas my true love gave to me

eight maids a-milking, seven swans a-swimming,

six geese a-laying, five gold rings;

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

On the ninth day of Christmas my true love gave to me

nine ladies dancing, eight maids a-milking, seven swans a-swimming,

six geese a-laying, five gold rings;

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

On the tenth day of Christmas my true love gave to me

ten lords a-leaping,

nine ladies dancing, eight maids a-milking, seven swans a-swimming,

six geese a-laying, five gold rings;

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

On the eleventh day of Christmas my true love gave to me

eleven pipers piping, ten lords a-leaping,

nine ladies dancing, eight maids a-milking, seven swans a-swimming,

six geese a-laying, five gold rings;

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me

twelve drummers drumming, eleven pipers piping, ten lords a-leaping,

nine ladies dancing, eight maids a-milking, seven swans a-swimming,

six geese a-laying, five gold rings;

four calling birds, three french hens, two turtle doves

and a partridge in a pear tree.

圣诞节的第一天,我的真爱给了我

梨树上的一只鹧鸪。

在圣诞节的第二天,我的真爱给了我

两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第三天,我的真爱给了我

三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第四天,我的真爱给了我

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第五天,我的真爱给了我

五枚金戒指;

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第六天,我的真爱给了我

六只鹅,五个金戒指;

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第七天,我的真爱给了我

七只天鹅游泳,

六只鹅,五个金戒指;

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第八天,我的真爱给了我

八个女仆一个挤奶,七只天鹅一个游泳,

六只鹅,五个金戒指;

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第九天,我的真爱给了我

九个女人跳舞,八个女仆挤奶,七只天鹅游泳,

六只鹅,五个金戒指;

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第十天,我的真爱给了我

十个领主a跳跃,

九个女人跳舞,八个女仆挤奶,七只天鹅游泳,

六只鹅,五个金戒指;

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第十一天,我的真爱给了我

十一个风笛手在吹笛,十个领主在跳跃,

九个女人跳舞,八个女仆挤奶,七只天鹅游泳,

六只鹅,五个金戒指;

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

在圣诞节的第十二天,我的真爱给了我

十二个鼓手打鼓,十一个风笛手吹笛,十个领主跳跃,

九个女人跳舞,八个女仆挤奶,七只天鹅游泳,

六只鹅,五个金戒指;

四只会叫的鸟,三只法国母鸡,两只斑鸠

梨树上的一只鹧鸪。

这首诗看起来挺长的,但代码又好像挺短的,是不是还挺有意思的~

这么复杂的代码,怎么去把它看明白呢?直接用眼睛瞪可能就是有点不太聪明的样子,这个比赛的目的就是把代码写的越乱,越不是人类能看懂,才能越可能获奖,如果我一眼就能瞪出来,那它就不能获奖了。

所以这个时候,我们可以把ChatGPT这种大预言模型请出来让他们帮忙。

当前能用的有OpenAI的ChartGPT4和3.5、阿里的通义千问、百度的文心一言、腾讯的腾讯混元等等,这几个我都用了试了,最后惊喜的发现,他们都能够毫不犹豫的立刻给出优化的代码,我自信的运行了一下发现没一个能跑通的。

相对来说,效果最好的是在vscode中的通义灵码,好歹输出了“On the”,完胜其他几款模型:

但最诚实的还应该是微软的Copilot,它就诚实又委婉的回答了“我不会”:

看来人工智能还是斗不过刁钻的程序员们,但是代码的执行逻辑,这几个大模型都能说的比较清楚,判断的也比较准,都是用复杂的递归去实现了这个功能。

所以说,我们再回过头来看,这些乱码作品,是不是很有它获奖的充分理由。

再后面我有测试了很多次,有几次是成功了的,但优化的代码可读性也并不理想,比如下面这个:

#include <stdio.h> char* message; int interpret(int t, int _, char* message) { return !0 < t ? t < 3 ? interpret(-79, -13, message + interpret(-87, 1 - _, interpret(-86, 0, message + 1) + message)) : 1, t < _ ? interpret(t + 1, _, message) : 3, interpret(-94, -27 + t, message) && t == 2 ? _ < 13 ? interpret(2, _ + 1, "%s %d %d\n") : 9 : 16 : t < 0 ? t < -72 ? interpret(_, 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 ? _ == *message ? putchar(31[message]) : interpret(-65, _, message + 1) : interpret((*message == '/') + t, _, message + 1) : 0 < t ? interpret(2, 2, "%s") : *message == '/' || interpret(0, interpret(-61, *message, "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"), message + 1); } int main(int argc, int argv, char* input) { return interpret(argc, argv, input); }


二、作品赏析(2)

这里还有一个更离谱的,56行,还摆了个造型:

#define So long #define R rand() #include <math.h> #include <X11/Xlib.h> #define T(i,F) ((So long)(i)<<F) #define O(c,L,i) c*sin(i)+L*cos(i) #define y(n,L) for(n=0; n<L 3; n++) #define P(v,L) d=0; y(l,)d+=T(L*l[v],l*20); #define X(q) q>>10&63|q>>24&4032|q>>38&258048 char J[1<<18]; int G[W*p],_,k,I=W/4+1,w=p/4+1; float C,B,e; unsigned So long A,n,d, t,h,x, f,o,r,a,l,L,F,i,s,H=1<<18,b=250,D[1<<14],z[W*p],q =0x820008202625a0;main(){Display *j=XOpenDisplay(0);Window u=XCreateSimpleWindow (j,RootWindow(j,0),0,0,W,p,1,0,0);XImage *Y=XCreateImage(j,DefaultVisual(j,0),24 ,2,0,(char*)G,W,p,32,0); XEvent M; for(XMapWindow(j,u); XSelectInput( j,u,1)&&a- 65307; ){ if(!H){ if(XCheckWindowEvent(j,u,1,&M)){ a=XLookupKeysym(&M.xkey,0);*( a&1?&C:& B)-=(.05 -a/2% 2* .1)*!(a- 1& 4092^ 3920);a+ 2&0xfe0^ 0xfc0||( s=a+2&31 ); }else { y(k,p+ ){ F=k%w* 4|k/w; float a[6],S=(F-p /2.) /p; y(_,W+){ i=_%I*4|_/I; if( F<p&i<W){ o=1; L= i+F*W;if (l=i&3); else{ l=F&3; o=W ; } h=z[L-o*l]; f =z[L+(4- l)*o]; t =F-p/2||i-W/2; r =h^f; if(!l| !t|( int)r|(! (h- 3&3) &&258063&r>>38)) { float V=(i-W/2. )/p,U=O( S,1,B),m =32768,Q=m; a[4] =O(-1,S,B); a[3]= O(U,V,C) ; a[5]=O (-V,U,C); P((a+3 ),s*42); t||(A=d) ;f=0;y(n ,){float N=a[n+3], E=1024 /fabs(N); b= N<0; float K= (((q>>20 *n)^~-b)+!b&1023 )/1024.; y(d,)a[d ]=a[d+3] *E; a[n] =round(a[n]); P( a,K); i=q+d; P(a, 1); e=E* K; for(; e<m; i+=d){ l=X(i); t=r=l^(l^l-( 1<<6*n)) &63<<6*n ; if(b){ r=l; l=t; } if(J[r])l=r ; if(t=J [l]){x=( n-1)?(i|i>>40)&1023|i>>8&4190208 |4194304 :i&1023| i>>28&4190208|(b^l==r)<<23; if(h =D[(x>>6 &0xf|x>> 14&0x3f0)+t*768]){ o=h; f=n|l*4| x<<32; m =e; } if (t==8&e<Q)Q=e; } e+=E; } }b=(255 -((f&3)+ 2)%3*51) *(1-m/32768); o=o*b>>8; G[L]=o>> 32<<8|o& 16711935 ; z[L]=3*(Q<=m)|f|b<<56; } else{ d=l*(f<< 8>>40)+( 4-l)*(h<<8>>40)>>2&16774143; o=D [(d>> 6& 15|d>>14 &1008)+J[(int)h/4]*768]*(b=h>>56 )>>8; G[ L]=o>>32 <<8 | o& 16711935 ; z[L]=( int) h|d <<32|b<< 56; } }} } q +=A; XPutImage (j, u+0, DefaultGC (j,J[X(q )]=0),Y, 0,0,0,0, W,p); }} else{ L= --H/768; J[H] =R% 16*(R%4< abs((H>> 6&63)-32 )+abs((H >>12&63) -32)-3); i=H &15; F=H %768 >>4; if( L<16){if (L-1|!(R %3))b=R% 96^255; l=i*i*3+i*81/4&3; a=L>3?L-8?L-5?9858122:12365733-488848*((i+F/4*4)%8&&F% 4):R%2*5298487:3352537*L*L-14202379*L+19205553; if(L==4)if(F<l+18)a=6990400;else if(l>F-19)b*=0.7; if(L==3){ if((i-1&15)<14&(F-1&15)<14&!(F&16)){ a=12359778; _=7 -i; k=7-F%16; _^=_>>31; k^=k>>31; b=196-R%32+(k>_?k:_)%3*42;} else{ b*=1+R%2*(.5 -(i&1)); } } D[H]=(a&16711935|(a&65280)<<24)*(b>>(F>>5))>>8&0xff00ff00ff; } } }}

 编译(make)一下,会有一些编译警告,不用管它,直接运行:

没错,就这么一个56行的“小程序”,硬是给我们整了个1G游戏效果的活,一个类似于3D的迷宫的小游戏,还可以通过键盘方向键调节反向,并且控制加速和减速。

仔细看代码会发现,里面用了一个#include <X11/Xlib.h>这个库,一切动画效果也都是基于这个库实现的,但不得不说,还是很腻害。


三、其他作品

类似这种优秀的获奖作品还有很多,我这里整理了几个很好玩有趣的作品,把他们代码的执行逻辑梳理(ChatGPT解读)了放在对应代码的下面,每一个代码都很短,直接可以编译运行,很方便的能看到他的执行效果。

1. 神奇的PI

#include<stdio.h> /******** SpigotQuine -- usage: ./spigot [pi or e] ********/ 
char* s = "G1%%xJ{;Q7wunmuGuu%%uu#include<stdio.h>/*Spigot_Quine*/#include<stdli"
"b.h>/*_IOCCC2012_*/int*e,"    "i,j,k,n"     ";char*q"    ",*a,*d,*z,*p=%s%c;"
"int" "%cmain(){a=calloc("                                 "1,1e4+n*2);;for(*"
"a=\0@3,z=d=a+n+1,j=n*8-7;"    "k=0,j-1"     ";j-=2){"    "for(a[1]+=2;--z-a;"
"*z=k%%10,k/=10)k+=j/2**z;;for(;k=k%%j*"     "10+*++z,z<d;)*z=k/" "j;;\0@2,z="
"d=a+n*2,*z=1,j=0;++j<n;){for(;k=k%%"           "j*10+*z,a-z;*z"   "--=k/j)a+"
"+;for(k=0;z-d;*a--=k%%10,k/=10)k+"               "=*++z+*a\0"     "@;}d+=spr"
"intf(q=d-20,p,p,34,32,n+1)+2;;;;"                 "for(n=n*2"     "0-400;k<n"
";++k%%n?j=!puts("                                                 "d):(d[j]="
"47,d++,d[j-2"                                                     "]=42),k%%"
"20<1?puts(d"                                                      "-1),a++:0"
"){for(i=-1"                                                       ";i++<32;!"
"*z?q[662]"          "=0,z=q+207:"                 "*z+z[1]<6"     "5?z+=11:*"
"z==34?p=0"         ":0)d[i]=((k/2"               "0-1?275*q["     "*a+10]-8*"
"q[*a+0]-8"         ":128)>>(i/11+k/"           "4%%5*3))&1?k"     "/3*!j&&p?"
"j=34:(j="           "i+1,*z++):32;k/3*"     "j--&&p?d[z--,j]=3"   "4:0;}}int"
"*y,n=%d;/*..~", * f = "nnLa5~z23~|22t$q(s82r&q(s82q'q(s8;q(s8;q(s8:" "r(s8:r(s8:"
"q)s89r)sLr#t+" "sLx,uJw-yGu/wnnnU", * g = "nnLa<z::t$u88t(u67t*u57s,t56t,t56~v56"
"tF6tF6tF8t1p"   "Nu/qOv+rS}Xxnng"; int main(int m, char** v) {char a[2012], b[2012], * p = a, * r = m > 1 && *v[1] == 'e' ? g : f, * q = b, * t = r;; sprintf(a, "%s%s%s", s, r == g ? s + 281 :s + 168, s + 386);     sprintf(b, a + 22, a, 34, 32, 24); for (sprintf(a, "%.33s/*%.28s*/%.3""3s/*%.28s*/%"   ".33s\"%s*/", b, b + 66, b + 33, b + 76, b + 66, b + 99); *r; r++) {; for (m = 0; m++< (*r - 34) % 77; *q++ = *r > 111 ? 32 : *p++)(q - b) % 66 < 1 ? *q++ = 10 : 0; *r - 110 && *r - 126 && r - t < (t - g ?62 : 45) ? *q++ = 34, ((q - b) % 66 < 1 ? *q++ = 10, *q++ = 34 : 0) : 0;}*q = 0; puts(b + 1);
}/*IOCCC2012*/

上述代码可以直接在VS中编译执行,执行效果是输出一个类似ASCII排版的pi:

但是这还没完,仔细观察它输出的所有字符,会发现这其实还是一段代码,再将其拷贝到VS中可以直接执行,输出结果是3.14样式的ASCII图案:

喂!这个作者,接招:

2. 跳舞的“甜甜圈”

             k;double sin(),cos();main(){float A=0,B=0,i,j,z[1760];char b[1760];printf("\x1b[2J");for(;;){memset(b,32,1760);memset(z,0,7040);for(j=0;6.28>j;j+=0.07)for(i=0;6.28>i;i+=0.02){float c=sin(i),d=cos(j),e=sin(A),f=sin(j),g=cos(A),h=d+2,D=1/(c*h*e+f*g+5),l=cos      (i),m=cos(B),n=s\
in(B),t=c*h*g-f*        e;int x=40+30*D*
(l*h*m-t*n),y=            12+15*D*(l*h*n
+t*m),o=x+80*y,          N=8*((f*e-c*d*g)*m-c*d*e-f*g-l        *d*n);if(22>y&&y>0&&x>0&&80>x&&D>z[o]){z[o]=D;;;b[o]=".,-~:;=!*#$@"[N>0?N:0];}}/*#****!!-*/printf("\x1b[H");for(k=0;1761>k;k++)putchar(k%80?b[k]:10);A+=0.04;B+=0.02;}}/*****####*******!!=;:~~::==!!!**********!!!==::-.,~~;;;========;;;:~-...,--------,*/

直接将上述代码保存为donut.c,编译命令:gcc -o donut donut.c -lm,执行:./donut

执行效果:

  • 出处:https://www.a1k0n.net/2006/09/15/obfuscated-c-donut.html
  • 原理讲解:https://www.a1k0n.net/2011/07/20/donut-math.html

3. 462个字节实现ASCII动画

c,p,i,j,n,F=40,k,m;float a,x,y,S=0,V=0;main(){for(;F--;usleep(50000),F?puts(
"\x1b[25A"):0)for(S+=V+=(1-S)/10-V/4,j=0;j<72;j+=3,putchar(10))for(i=0;x=S*(
i-27),i++<73;putchar(c[" ''\".$u$"]))for(c=0,n=3;n--;)for(y=S*(j+n-36),k=0,c
^=(136*x*x+84*y*y<92033)<<n,p=6,m=0;m<8;k++["<[\\]O=IKNAL;KNRbF8EbGEROQ@BSX"
"XtG!#t3!^"]/1.16-68>x*cos(a)+y*sin(a)?k=p,p="<AFJPTX"[m++]-50:k==p?c^=1<<n,
m=8:0)a=(k["O:85!fI,wfO8!yZfO8!f*hXK3&fO;:O;#hP;\"i[by asloane"]-79)/14.64;}

将上述代码保存为yanim.c,编译命令:gcc -o yanim yanim.c -lm,执行:./yanim

执行效果:

出处及讲解:https://www.a1k0n.net/2011/06/26/obfuscated-c-yahoo-logo.html

4. 一行代码的火焰效果

b[2080];main(j){for(;;){printf("\x1b[H");for(j=1;j<2080;j++)b[j]=j<2000?(b[j+79]+b[j+80]+b[j]+b[j-1]+b[j+81])/5:rand()%4?0:512,j<1840?putchar((j%80)==79?'\n':" .:*#$H@"[b[j]>>5]):0;usleep(20000);}}

将上述代码保存为fire.c,编译命令:gcc -o fire fire.c,执行:./fire

执行效果:

出处:https://www.a1k0n.net/2007/08/24/obfuscated-c-fire.html

5. 一朵“I love you”

#include<stdio.h> main() { int i,l,u; char *ilu="STILL THINKING HOW I DID IT?\ !r/g.g#i.g/g!j/g.g#i.g/g+g!q0g!mag/h(g!m]g+g!p<g!h`i!l`g!k`g!h\ <g+g!p}g!i}g!i}g!h0g!g]g}g!g}h`g!h}g+g!p<g!h`g}g`g!h}g`h]g`g0g}\ g0g!g}g`g!h<g+g!q]g!n`g!o0g+g!r]g`h!g]g`g0h!g]g}g!g}g!j0g+g!n`g!\ i0g!h}g!g}g!g]g`g0g]g`g0g!h0g(g+g!m}g!g]g!h]g0g`g0g]g!n0g(g+g!m]g\ `g]g}g!g0g!g`h!gag]g!j0g(g+g!p]g0g`g0g`h]g!hag]g0g(g!k/g.h>g(g0g\ g]g+g!i`j-g`h0g`h-g`k-g`l*g0g!i0g|gg~i+g!i.g-g.k-g.h]g.h-g.k-\ g.i-g]g(g.g(g!g|hg~h+g!q`h0g]g`g!r(g.h>g/g]g~g0g+g!p0g`g0g!g\ }g]h+g!u]g0g"; for(i=28;l=ilu[i++];) for(u=(*(ilu+++i)-((1<<6)+(1<<5)+(1<<2)+(1<<1)));u--;) putchar(!((l-11)^(1<<5))?l-1-(1<<5):l-1); }

直接在VS中编译执行,输出:

6. 输出程序生成时间

main(_) { _ ^ 448 && main(-~_); putchar(--_ % 64 ? 32 | -~7[__TIME__ - _ / 8 % 8][">'txiZ^(~z?" - 48] >> ";;;====~$::199"[_ * 2 & 8 | _ / 64] / (_ & 2 ? 1 : 8) % 8 & 1 : 10); }

直接在VS中编译执行,输出程序生成时候(编译)的时间:

7. 印度地图

#include<stdio.h> int main() { int a, b, c; for (b = c = 10; a = "- FIGURE?, UMKC,XYZHello Folks,\TFy!QJu ROo TNn(ROo)SLq SLq ULo+UHs UJq TNn*RPn/QPbEWS_JSWQAIJO^\NBELPeHBFHT}TnALVlBLOFAkHFOuFETp\HCStHAUFAgcEAelclcn^r^r\\tZvYxXy\T|S~Pn SPm SOn TNn ULo0ULo#ULo-W\Hq!WFs XDt!"[b++ + 21]; ) for (; a-- > 64; ) putchar(++c == 'Z' ? c = c / 9 : 33 ^ b & 1); return 0; }

直接在VS中编译执行,输出:

除了C语言乱码大赛,还有一个C语言有意思的玩法是,把一段代码,执行后输出显示的结果,就完完全全是源代码本身,也很有趣。

8. 程序代码与输出完全一样

如果让你写一个程序,让程序执行后输出的内容,和程序本身代码一模一样。你先想一想怎么实现,是不是还挺迷糊的。看下面这个:

#include <stdio.h> char* s = "#include <stdio.h>%cchar*s=%c%s%c;%cmain(){printf(s,10,34,s,34,10,10);}%c"; main() { printf(s, 10, 34, s, 34, 10, 10); }

上面代码执行的结果,和程序本身代码一模一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/688394.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国政府发布新的国际网络空间和数字政策战略(上)

文章目录 前言一、战略内容介绍二、数字团结的含义三、如何建立数字团结前言 美国务院5月6日正式发布《美国国际网络空间和数字政策战略:迈向创新、安全和尊重权利的数字未来》,旨在指导国际社会参与技术外交并推动《美国国家安全战略》和《美国国家网络安全战略》。 美国务…

界面组件DevExpress Reporting中文教程 - 标记(可访问)PDF导出增强

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 可访问性支持在DevExpress这里仍然是一个高优先…

深入理解卷积函数torch.nn.Conv2d的各个参数以及计算公式(看完写模型就很简单了)

代码解释帮助理解&#xff1a; torch.randn(10, 3, 32, 32)&#xff0c;初始数据&#xff1a;(10, 3, 32, 32)代表有10张图片&#xff0c;每张图片的像素点用三个数表示&#xff0c;每张图片大小为32x32。&#xff08;重点理解这个下面就好理解了&#xff09; nn.Conv2d(3, 64…

独家丨美团直播积极寻求MCN公司合作,却意外成商家刷单圣地?

图片&#xff5c;《扫黑决战》截图 ©自象限原创 作者丨薛黎 编辑丨程心 2023年4月18日&#xff0c;美团直播在“神券节”中正式上线。整整一年之后&#xff0c;美团直播又在持续加码。 据「自象限」独家获悉&#xff0c;在去年12月美团上线达人直播后&#xff0c;近期…

Verilog_学习路线(小白)

#前言&#xff1a; 自从专心学习专业课后&#xff0c;发现知识点得用&#xff0c;越用越熟练&#xff0c;工具也一样&#xff0c;高级工具的学习可帮助我们在工作中极大地提高效率&#xff0c;但这里要记住一点&#xff0c;任何工具都是为解决实际问题出现的&#xff0c;即落脚…

Spring Cloud Gateway 全局过滤器

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 全局过滤器作用于所…

可以直接用的搭建训练一个气象深度学习模型全流程代码--part1 以预报预测为例

本期内容分享一套全流程搭建训练气象深度学习模型的代码&#xff0c;并考虑在基础的预报预测领域的应用。 本期内容的目标是&#xff1a;尽量让看过本文的读者&#xff0c;可以直接在本地一键跑通如SmaAtUNet、UNet等卷积网络&#xff0c;ConvLSTM、TrajGRU、PhyDNet、STPhy等…

Android Studio 读不到Android设备

Android Studio 读不到Android设备 在进行Android应用开发时&#xff0c;我们经常会遇到一种情况&#xff0c;就是Android Studio无法读取到连接在电脑上的Android设备。这个问题可能出现在不同的场景中&#xff0c;比如在运行应用程序时&#xff0c;设备列表中找不到连接的设…

CSS-背景属性

目录 背景属性 background-color (背景颜色 ) background-image (背景图片 ) background-repeat (背景图平铺方式 ) no-repeat 不平铺 repeat-x 水平方向平铺 repeat-y 垂直方向平铺 repeat 平铺 background-position (背景图位置) background-size (背景缩…

通过单总线实现单片机之间的数据传输

单总线、没有时钟线的通信时&#xff0c;不能使用简单的高低电平来通信&#xff0c;因为接收方不知道此时发送的数据是第几位数据&#xff0c;容易造成错乱。 因此在使用一根线对外传输数据时&#xff0c;需要自定义一个通信协议&#xff0c;它至少要包含格式头数据&#xff0c…

使用 AI Assistant for Observability 和组织的运行手册增强 SRE 故障排除

作者&#xff1a;Almudena Sanz Oliv, Katrin Freihofner, Tom Grabowski 通过本指南&#xff0c;你的 SRE 团队可以实现增强的警报修复和事件管理。 可观测性 AI 助手可帮助用户使用自然语言界面探索和分析可观测性数据&#xff0c;利用自动函数调用来请求、分析和可视化数据…

随身wifi网速测评!讯唐随身wifi和格行随身wifi哪个网速快?随身wifi哪个品牌最好用?

最近收到很多网友私信&#xff0c;希望推荐一款好用性价比高的随身wifi。通过各平台排行榜选出了公认口碑最好的格行随身wifi&#xff1b;又挑选了网友们经常问的的讯唐随身wifi&#xff1b;两个一起来实测一下&#xff0c;哪款更好用&#xff01; 【品牌评测】 格行随身wifi&…