一直以為自己C學的挺好:直到看了這幾個C代碼,連聲說出「臥槽」

2021-01-11 電子工程專輯

曾經我一直以為自己C語言學的還挺好的,直到看到這幾個例子。

例1

首先來看一下,大師是如何求圓周率的,一口君實在詞窮,first臥槽

#include <stdio.h>
    long a=10000,b=0,c=10000,d,e,f[10001],g;
    void main()
    {
    for(;b != c; f[b++] = a/5);
    for(; d=0,g=c*2,c>5000; c--,printf("%.4d",e+d/a),e=d%a)
    for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); 
    } 

執行結果:

例2

模擬圖靈機列印基為2的斐波納契數,double臥槽

#include <stdio.h>
#define f int
#define v (void)printf(
#define x ),exit(1);
#define y ){if(n)c=z(n,u),u=n,n=c;o[i]=n?'0'+(1&*n):'0';}
#define z(a,b) (f*)(~1&*a^(f)b)
#define k(l) if(!(l=(f*)malloc(sizeof(l))))v 23+m x if(1&(f)l)v 39+m x*l=
r(p,q,d)f*p,*q;{char o[81];f*n=p,i=39,*c,*u=d?q:z(p,q);o[40]='0'+(1&*p);
for(;i>=0;i--y u=d?z(p,q):q;n=p;for(i=41;i<79;i++y o[i++]='\r';o[i++]=0;
v o);(void)fflush(stdout);sleep(1);}
main(a,c)char**c;{char*u,*malloc(),*m=
"Usage: black [string]\n\0No more memory\n\0Unusable memory alignment\n\0jt,s@m@ (beleY%XX&Yz {z&z}i|R(|)*((.)i)hiniFiGJ%FG.JJgJ: ;;&;z {z&z}-RS/ROiOV OP+PsaPh+ijainnjmamfmfAlnnnnphppopv%vvgv.aABiB1/BVP11/1.%..&.OhrR-WV V1#1VP1CcC0R\
\n\n'CVP0\n!\n\n'\nEaEEnEamat!akckk'kwaww'wz,zzozEit +",
*n=m;f*q,*p=0,*g,b=3,d;
if(a>2)v m x n=a>1?c[1]:n;
/*v"\t\t\t\t\tV\n");*/
k(q)0;u=n;a=~1&'j';
while(a!='x'){
 /*r(q,p,b);*/
 for(;;u+=3){
  u= *u?u:n;
  if((~1&*u)==a&&(1&*q)<<1==(2&u[2]))break;
 }
 a=~1&u[1];
 d=(8&u[2])>>3;
 if(16&u[2])putchar(u[3]);
 if(4&u[2])*q|=1;else*q&=~1;
 if(b==d)g=p;else{
  g=z(q,p);
  if(!g){k(g)(f)q;*q^=(f)g;}
 }
 p=q;q=g;b=1-d;
}
/*r(q,p,b);v"\n");*/exit(0);
}

執行結果:

例3

#include <stdio.h>
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(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);
}

是的,你沒有看錯,這個代碼沒有問題,可以編譯,執行結果:

居然是這個執行結果,treble臥槽,聊表敬意。

【作者是Ian Phillipps】

例4

這個極富行為藝術的小火車,已經讓一口君已經開始徹底懷疑人生了!quadra臥槽

結果如下:

peng@ubuntu:~/test$ ./marshall 
      choo choo

例5

如果你仍然覺得just so so,那好吧,你再看下面這個代碼,簡直就是藝術與代碼的天作之合。

我相信這個代碼的作者一定是個滿臉絡腮鬍子油膩的摳腳擼串肥宅男,否則怎麼會畫出這麼驚世駭俗、震驚寰宇、美的不可方物、如此卡哇伊的小蘿莉!penta臥槽!!!!!

看下他的執行結果吧:


這些代碼是IOCCC 【(The International Obfuscated C Code Contest)國際C語言混亂代碼大賽是一項國際編程賽事】的一些獲獎作品,有興趣可以去搜索下。

毫無疑問,這些大師都是世界上最頂級的C語言程式設計師,都是god like、legendary。在這裡我們就不討論這些代碼了,一口君並不是鼓勵你也去寫這樣的代碼(關於這些代碼的分析,你可以上網查詢)。恰恰相反,我要告訴大家的是:大師把代碼寫成這樣是經典,你把代碼寫成這樣是垃圾!所以在垃圾和經典之間,你需要做一個抉擇。

C語言博大精深,各位碼農,且學且珍惜!

相關焦點

  • 看了這幾個C語言例子,你一定和我一樣連說5個臥槽...
    曾經我一直以為自己C語言學的還挺好的,直到看到這幾個例子。例1首先來看一下,大師是如何求圓周率的,一口君實在詞窮,first臥槽。/marshall       choo choo例5如果你仍然覺得just so so,那好吧,你再看下面這個代碼,簡直就是藝術與代碼的天作之合。
  • C/C+編程筆記:C語言預處理命令是什麼?不要以為你直接寫#就行!
    很多小夥伴在自己寫代碼的時候,已經多次使用過#include命令。使用庫函數之前,應該用#include引入對應的頭文件。其實這種以#號開頭的命令稱為預處理命令。
  • C/C+編程筆記:C語言入門題之正倒金字塔,正反三角形代碼詳解
    其實學編程關鍵是學習其思想,如果你精通了一門,再去學其他的時候也很容易上手。C不會過時的,尤其是在unix、linux操作平臺上,學好C是必須的。 C跟C++在很多方面也是兼容的,c是c++的基礎。
  • 編寫高效的C程序與C代碼優化
    ,不方便查看,而且有部分翻譯錯誤以及其他錯誤,這篇文章除了參考原文和譯文,也加入了自己的一些理解和代碼,雖然是一篇2006年的文章,但是其中的一些技巧還是挺值得學習的,特重新整理出來與大家分享。現在的ARM處理器需要消耗20+4.3N個時鐘周期,這是一個非常費時的操作,要儘可能的避免。在有些情況下,除法表達式可以用乘法表達是來重寫。比方說,(a/b)>c可以寫成a>(c*b),條件是我們已經知道b為非負數而且b*c不會超過整型數的取值範圍。如果我們能夠確定其中的一個操作數為unsigned,那麼使用無符號除法將會更好,因為它要比有符號除法快得多。
  • C語言?c+?到底先學哪個才能更好的理解編程,這些你造嗎
    首先很多人覺得C語言是c++的子集,覺得直接學習c++就可以了,還要花費一個學期的時間先學C語言有必要嗎?但是,1.c語言是好多學校的基礎課;2.c語言很容易描述算法;3.軟體開發過程中也有很多面向過程的開發,以及模塊化程序設計思想。要學習這些,比起學c++的複雜、困難程度,學c語言就可以達到上述目的。
  • 【C/C+】10個經典的C語言小程序,小白必看!
    1、題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? 5、題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
  • 【C語言】02.第一個C語言程序
    其實,這是非常沒必要的做法,我們學的是編程,並不是學英文,沒有必要一個一個詞語地去扣。再說,這些詞語對計算機來說並不是什麼英文單詞,僅僅是個符號、是代碼!!!計算機只能識別0和1,因此還要將這些代碼編譯成0和1之後才能被計算機所執行。計算機並不是有道詞典,它不可能認識什麼英文單詞。很多代碼都是固定寫法,並沒有太多的所謂英文含義。
  • 10個經典的C語言面試基礎算法及代碼
    C語言實現的代碼如下:Enter number of terms: 10Fibonacci Series: 0+1+1+2+3+5+8+13+21+34+也可以使用下面的原始碼:/* Displaying Fibonacci series up to certain number entered by user.
  • 學C語言的心酸史(七)
    對於同一個問題,讓大家去解開答案,可能經過一些紙筆的運算都能得出結果,但是如何把這個問題轉化成代碼解決,這就是一種能力。    而僅僅是將問題轉換成代碼,這是較為淺層次的能力,更深層的便是通過優化代碼讓程序運行時間縮短以及減少可能出現的bug,當然這不是我現在應該考慮的,我還只是個C語言小菜雞…….
  • 如何寫出高效優美的單片機C語言代碼?
    程序能跑起來並不見得你的代碼就是很好的c代碼了,衡量代碼的好壞應該從以下幾個方面來看1,代碼穩定,沒有隱患。本文引用地址:http://www.eepw.com.cn/article/201611/319838.htm2,執行效率高。3,可讀性高。4,便於移植。
  • c語言是C語言 C教程語言零基礎教學04:int和float變量的基本使用
    大家好,我是陌塵那麼就直接開始了我們這篇教程學for循環以及冒泡算法我們先來理解一下什麼是「循環」字面意思:但是,C語言的循環和這個有點點不同,c語言中大概就是:重複執行一段特定的代碼。(其實就是類似方程)條件表達式,就是一種條件只要這個條件是真(條件成立)就執行特定代碼等特定代碼執行完才執行末尾的表達式for (int a = 0; a < 100; a++){printf("%d ", a);}這是一個簡單的例子,分析一下首先int a = 0;
  • 譚浩強老爺子的《C程序設計》是坑?
    老譚書上類似i++++i這種代碼,確實實際代碼這麼寫不合適,但是作為初學者,這是通過這種方式教你在理解優先級,通過這種拗口的方式可以理解的更加徹底,我覺得沒問題。就像小學數學課的應用題。舉個例子,池子一邊裝水,一邊放水,求水多久能裝滿池子。難道也要噴一下什麼鬼題目,浪費水。這明明就是考的對題目的理解,又不是真讓你去做個實驗。一個道理。
  • 寫出高效優美的單片機C語言代碼
    程序能跑起來並不見得你的代碼就是很好的c代碼了,衡量代碼的好壞應該從以下幾個方面來看1,代碼穩定,沒有隱患。下面發一些我在網上看到的技巧和自己的一些經驗來和大家分享;1、如果可以的話少用庫函數,便於不同的mcu和編譯器間的移植2、選擇合適的算法和數據結構應該熟悉算法語言,知道各種算法的優缺點,具體資料請參見相應的參考資料,有很多計算機書籍上都有介紹。
  • c語言答疑:學完了能幹嘛?為什麼界面一直是黑框框?
    不少同學剛接觸c語言的時候,不知道c語言是幹嘛用的,學完了好像也沒有什麼地方能用到,實際上,c語言是學習編程的基礎,所有的程式語言都是基於c語言而逐步發展的,只要你學好了c語言,其它語言基本是一看就能看懂裡面的代碼邏輯,業務邏輯不用看,單純的從代碼角度就大致能明白這行代碼是幹什麼的
  • C符號陷阱
    我們再來看看下面的例子:while (c = 『 』 || c == 『\t』 || c== 『\n』)      c = getc (f);該程序的本意是跳過文件中的空格符、制表符和換行符,但是由於程式設計師在比較字符 ' ' 和變量 c 時,誤將比較運算符 == 寫成了賦值運算符 = 。
  • C語言太簡單?這14道C語言謎題,你能答對幾個?
    本文展示了14個C語言的迷題以及答案,有的例子可能是我們日常工作中會常見的。通過這些迷題,希望你能更了解C語言。如果你不看答案,不知道是否有把握回答各個謎題?讓我們來試試。下面的程序並不見得會輸出"hello-std-out",你知道為什麼嗎?
  • 學習c語言,知道這三個資源就行了
    c語言作為目前最熱門的程式語言之一,一直是學生、程式設計師必須學習的課程之一,但目前許多學校的課程太過老舊,教材和教程也參差不齊,這裡就給大家推薦幾個比較好的學習c語言的資源。第二個推薦的是就是中國大學慕課上面浙江大學翁愷教授的C語言課程了,作為一門國家精品課程,課程質量沒得說,自上線以來就飽受廣大學子的好評。該課程設計十分詳細也十分基礎,從入門到進階一步步幫助你成為程序老鳥,根本不用擔心會跟不上,尤其是課程是與課程教學同步進行,每周佔用的時間較少,對於一些忙的人來說十分給力。
  • 雙劍合璧,Python調用C代碼
    在本文中,我們將用C語言實現一個Python模塊,並在Python代碼中對其進行調用。作為例子,這個模塊中將包含兩個簡單的函數:Hello World斐波那契函數C文件首先我們創建一個.c文件,並且加入
  • C語言中的scanf函數
    在寫代碼時總是不小心在這裡犯錯,所以特意查了一下這個函數,並且做以整理,現分享給大家。
  • 用C語言編寫屬於自己的程式語言,大一學完C語言即可做!
    實驗環境 : linux2.知識點 : 大一所學 C語言 知識二 要做功能:1.實現語法分析列印 hello-world>2.實現變量定義,賦值和銷毀3.更多功能關注我後期發教程三 要用到的幾個 C語言 基礎庫裡的函數,請了解這些函數後再繼續閱讀: