1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 3949字,需瀏覽 8分鐘

         ·

        2020-07-08 23:24


        關(guān)注、星標公眾號,直達精彩內(nèi)容

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

        作者:李肖遙


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

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

        1. 這是我找到最多的答案,估計是程序員想自黑還是說這個帶大家步入了代碼的世界。
        #include?
        int?main(void)?
        {?
        ??printf("Hello,World");?
        ??return?0;
        }?
        1. 代碼的運行結(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的源碼實現(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位里有多少個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中最重要的迭代方法,很巧妙,通過一個結(jié)構(gòu)體的成員指針獲取結(jié)構(gòu)體本身的指針,一個計算偏移,一個計算首地址,Linux內(nèi)核或驅(qū)動開發(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里面對鏈表的操作見到過 DO_SOMETHING 只是我做例子取的一個macro名字;do_something() 并不是一行,可能是很多行,很多處理邏輯。
        #define?DO_SOMETHING()???do?\
        {\
        ????do_something();\
        }while(0)

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

        由于年代久遠,看不到這段代碼到底有什么效果,于是寫了個可以在windows下編譯運行的代碼。

        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'
        };

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

        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. 最后這個
        #include?

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

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

        8e35f6f01a62cba8beec0f52674e3104.webp

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

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

        瀏覽 87
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产精品人妻人伦a 6 2v久软件 自拍啪啪视频 | 韩国一级黄色大片 | 999天堂网 | www青青草 | 中文字幕性爱 | 日本天堂免费a | 日韩一线在线 | 91精品日韩人妻无码久久不卡 | 国产又粗又猛又爽又黄视频 | 十八毛片18女人18毛片免费观看 |