在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 寫出高效優(yōu)美的單片機C語言代碼

            寫出高效優(yōu)美的單片機C語言代碼

            作者: 時間:2013-07-01 來源:網(wǎng)絡 收藏

            這行會被展開為:

            printf("int max: %sn", "INT_MAX");

            printf("%sn", CONS(A, A)); // compile error

            這一行則是:

            printf("%sn", int(AeA));

            INT_MAX和A都不會再被展開, 然而解決這個問題的方法很簡單. 加多一層中間轉(zhuǎn)換宏. 加這層宏的用意是把所有宏的參數(shù)在這層里全部展開, 那么在轉(zhuǎn)換宏里的那一個宏(_STR)就能得到正確的宏參數(shù).

            #define A (2)

            #define _STR(s) #s

            #define STR(s) _STR(s) // 轉(zhuǎn)換宏

            #define _CONS(a,b) int(a##e##b)

            #define CONS(a,b) _CONS(a,b) // 轉(zhuǎn)換宏

            printf("int max: %sn", STR(INT_MAX)); // INT_MAX,int型的最大值,為一個變量 #include

            輸出為: int max: 0x7fffffff

            STR(INT_MAX) --> _STR(0x7fffffff) 然后再轉(zhuǎn)換成字符串;

            printf("%dn", CONS(A, A));

            輸出為:200

            CONS(A, A) --> _CONS((2), (2)) --> int((2)e(2))

            三、'#'和'##'的一些應用特例

            1、合并匿名變量名

            #define ___ANONYMOUS1(type, var, line) type var##line

            #define __ANONYMOUS0(type, line) ___ANONYMOUS1(type, _anonymous, line)

            #define ANONYMOUS(type) __ANONYMOUS0(type, __LINE__)

            例:ANONYMOUS(static int); 即: static int _anonymous70; 70表示該行行號;

            第一層:ANONYMOUS(static int); --> __ANONYMOUS0(static int, __LINE__);

            第二層: --> ___ANONYMOUS1(static int, _anonymous, 70);

            第三層: --> static int _anonymous70;

            即每次只能解開當前層的宏,所以__LINE__在第二層才能被解開;

            2、填充結(jié)構(gòu)

            #define FILL(a) {a, #a}

            enum IDD{OPEN, CLOSE};

            typedef struct MSG{

            IDD id;

            const char * msg;

            }MSG;

            MSG _msg[] = {FILL(OPEN), FILL(CLOSE)};

            相當于:

            MSG _msg[] = {{OPEN, "OPEN"},

            {CLOSE, "CLOSE"}};

            3、記錄文件名

            #define _GET_FILE_NAME(f) #f

            #define GET_FILE_NAME(f) _GET_FILE_NAME(f)

            static char FILE_NAME[] = GET_FILE_NAME(__FILE__);

            4、得到一個數(shù)值類型所對應的字符串緩沖大小 #define _TYPE_BUF_SIZE(type) sizeof #type #define TYPE_BUF_SIZE(type) _TYPE_BUF_SIZE(type) char buf[TYPE_BUF_SIZE(INT_MAX)]; --> char buf[_TYPE_BUF_SIZE(0x7fffffff)]; --> char buf[sizeof "0x7fffffff"]; 這里相當于: char buf[11];

            c語言相關(guān)文章:c語言教程



            上一頁 1 2 3 4 下一頁

            關(guān)鍵詞: 單片機 C語言 代碼

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉