<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你見過“最美”的C語言代碼是什么?

          共 3949字,需瀏覽 8分鐘

           ·

          2020-07-08 23:24


          關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容

          ID:技術(shù)讓夢(mèng)想更偉大

          作者:李肖遙


          我們都知道雷軍雷布斯說過當(dāng)時(shí)他寫的代碼像詩一樣優(yōu)美,那已經(jīng)是三十年前的匯編時(shí)代了,那么現(xiàn)在你有見到過最美的c語言代碼嗎?

          我在網(wǎng)上收集了一些代碼,供大家賞詩,其中我本人最喜歡最后一個(gè)。

          1. 這是我找到最多的答案,估計(jì)是程序員想自黑還是說這個(gè)帶大家步入了代碼的世界。
          #include?
          int?main(void)?
          {?
          ??printf("Hello,World");?
          ??return?0;
          }?
          1. 代碼的運(yùn)行結(jié)果是代碼本身
          char*?f?=?"char?*?f?=?%c%s%c;main(){printf(f,34,f,34,10);}%c";
          main()
          {
          ????printf(f,34,f,34,10);
          }

          編譯結(jié)果如下:


          dc15aeeaf10fab055fec4363c235fe75.webp

          1. 匯編留下來的小技巧
          #define?STATE_TABLE?\
          ????????ENTRY(STATE0,?func0)?\
          ????????ENTRY(STATE1,?func1)?\
          ????????ENTRY(STATE2,?func2)?\
          ????????...
          ????????ENTRY(STATEX,?funcX)?\

          enum
          {
          ??#define?ENTRY(a,b)?a,
          ??????STATE_TABLE
          ??#undef?ENTRY
          ??????NUM_STATES
          };

          p_func_t?jumptable[NUM_STATES]?=
          {
          ??#define?ENTRY(a,b)?b,
          ??????STATE_TABLE
          ??#undef?ENTRY
          };

          #define?ENTRY(a,b)?static?void?b(void);
          ????STATE_TABLE
          #undef?ENTRY
          1. 用來獲取函數(shù)中的可變參數(shù),具體用法可參加printf的源碼實(shí)現(xiàn)
          typedef??char?*??va_list;???

          #define?_INTSIZEOF(x)?((sizeof(x)+?sizeof(int)-?1)?&?~(sizeof(int)?-?1))

          #define??va_start(ap,v)??(?ap=?(va_list)&v+?_INTSIZEOF(v)?)

          #define??va_arg(ap,t)??(?*(t?*)((ap?+=?_INTSIZEOF(t))?-?_INTSIZEOF(t))?)

          #define??va_end(ap)????(?ap?=?(va_list)0?)
          1. 這是算64位里有多少個(gè)bit是1的
          const?uint64_t?m1??=?0x5555555555555555;?//binary:?0101...
          const?uint64_t?m2??=?0x3333333333333333;?//binary:?00110011..
          const?uint64_t?m4??=?0x0f0f0f0f0f0f0f0f;?//binary:??4?zeros,??4?ones?...
          const?uint64_t?m8??=?0x00ff00ff00ff00ff;?//binary:??8?zeros,??8?ones?...
          const?uint64_t?m16?=?0x0000ffff0000ffff;?//binary:?16?zeros,?16?ones?...
          const?uint64_t?m32?=?0x00000000ffffffff;?//binary:?32?zeros,?32?ones

          int?popcount64a(uint64_t?x)
          {
          ????x?=?(x?&?m1?)?+?((x?>>??1)?&?m1?);?//put?count?of?each??2?bits?into?those??2?bits?
          ????x?=?(x?&?m2?)?+?((x?>>??2)?&?m2?);?//put?count?of?each??4?bits?into?those??4?bits?
          ????x?=?(x?&?m4?)?+?((x?>>??4)?&?m4?);?//put?count?of?each??8?bits?into?those??8?bits?
          ????x?=?(x?&?m8?)?+?((x?>>??8)?&?m8?);?//put?count?of?each?16?bits?into?those?16?bits?
          ????x?=?(x?&?m16)?+?((x?>>?16)?&?m16);?//put?count?of?each?32?bits?into?those?32?bits?
          ????x?=?(x?&?m32)?+?((x?>>?32)?&?m32);?//put?count?of?each?64?bits?into?those?64?bits?
          ????return?x;
          }

          以上代碼來自www.wikipedia.org?

          鏈接:

          https://en.wikipedia.org/wiki/Hamming_weight#Efficient_implementation

          1. kernel 鏈表 list 操作代碼的一部分

          linux kernel中最重要的迭代方法,很巧妙,通過一個(gè)結(jié)構(gòu)體的成員指針獲取結(jié)構(gòu)體本身的指針,一個(gè)計(jì)算偏移,一個(gè)計(jì)算首地址,Linux內(nèi)核或驅(qū)動(dòng)開發(fā)常遇見。

          #define?offsetof(TYPE,?MEMBER)?((size_t)?&((TYPE?*)0)->MEMBER)
          #define?container_of(ptr,?type,?member)?({??????????\
          ????const?typeof(((type?*)0)->member)*__mptr?=?(ptr);????\??
          ????(type?*)((char?*)__mptr?-?offsetof(type,?member));})
          #define?list_entry(ptr,?type,?member)?\
          ????container_of(ptr,?type,?member)
          1. linux里面對(duì)鏈表的操作見到過 DO_SOMETHING 只是我做例子取的一個(gè)macro名字;do_something() 并不是一行,可能是很多行,很多處理邏輯。
          #define?DO_SOMETHING()???do?\
          {\
          ????do_something();\
          }while(0)

          DO_SOMETHING();
          1. 首屆IOCCC比賽中的一個(gè)代碼

          由于年代久遠(yuǎn),看不到這段代碼到底有什么效果,于是寫了個(gè)可以在windows下編譯運(yùn)行的代碼。

          short?main[]?=?{
          ?277,?04735,?-4129,?25,?0,?477,?1019,?0xbef,?0,?12800,
          ?-113,?21119,?0x52d7,?-1006,?-7151,?0,?0x4bc,?020004,
          ?14880,?10541,?2056,?04010,?4548,?3044,?-6716,?0x9,
          ?4407,?6,?5568,?1,?-30460,?0,?0x9,?5570,?512,?-30419,
          ?0x7e82,?0760,?6,?0,?4,?02400,?15,?0,?4,?1280,?4,?0,
          ?4,?0,?0,?0,?0x8,?0,?4,?0,?',',?0,?12,?0,?4,?0,?'#',
          ?0,?020,?0,?4,?0,?30,?0,?026,?0,?0x6176,?120,?25712,
          ?'p',?072163,?'r',?29303,?29801,?'e'
          };

          不用加頭文件就可以編譯的,這段代碼主要是彈出一個(gè)消息框做演示如下

          double?main[]?=?{
          -2.4701240043063294e-255,7.0200995176637059e-269,
          1.7039916353015322e-248,

          2.0829486981857065e-017,3.1678173412277654e-152,
          1.4561366983095816e-300,

          2.8652426426650795e+161,1.1610765287701034e+200,
          -1.1126115309662626e+034,

          2.5955200557858144e-303,5.3745432333120549e+196,
          3.2709387181673304e+228,

          -7.1518888970417846e+161,-1.7905983542158763e+305,
          1.0622411385586801e-321
          };
          1. 也有說到菲波那契
          int?fibonacci(?int?n?)?
          {?
          ??return?fib_iter(?0,?1,?n?);?
          }
          int?fib_iter(?int?a,?int?b,?int?n?)?
          {?
          ??return??n????fib_iter(?b,?a+b,?n-1?)?:?b;?
          }
          1. 最后這個(gè)
          #include?

          int?main(void)
          {
          ????//for?(?;?;?);?
          ????printf("I?Love?You!");
          ????return?0;
          }

          如果感興趣的可以繼續(xù)深入編譯了解一下,拋磚引玉,意在引起大家的興趣。

          8e35f6f01a62cba8beec0f52674e3104.webp

          推薦閱讀:
          嵌入式編程專輯Linux 學(xué)習(xí)專輯
          C/C++編程專輯
          關(guān)注微信公眾號(hào)『技術(shù)讓夢(mèng)想更偉大』,后臺(tái)回復(fù)“m”查看更多內(nèi)容,回復(fù)“加群”加入技術(shù)交流群。

          長按前往圖中包含的公眾號(hào)關(guān)注

          瀏覽 87
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜肏逼 | 精品无码产一区二区 | 亚洲AV日韩AV永久无码网站 | 中文字幕国产精品 | 夜夜爽影视91 |