新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 寫出高效優美的單片機C語言代碼

        寫出高效優美的單片機C語言代碼

        作者: 時間:2013-07-01 來源:網絡 收藏

        這行會被展開為:

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

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

        這一行則是:

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

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

        #define A (2)

        #define _STR(s) #s

        #define STR(s) _STR(s) // 轉換宏

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

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

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

        輸出為: int max: 0x7fffffff

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

        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、填充結構

        #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、得到一個數值類型所對應的字符串緩沖大小 #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語言相關文章:c語言教程



        上一頁 1 2 3 4 下一頁

        關鍵詞: 單片機 C語言 代碼

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 呼和浩特市| 宁国市| 民和| 永丰县| 漾濞| 叙永县| 本溪| 元朗区| 南通市| 阿城市| 西平县| 石家庄市| 齐齐哈尔市| 福州市| 綦江县| 临澧县| 同江市| 康乐县| 建始县| 林州市| 黄石市| 建湖县| 唐山市| 米易县| 高安市| 新平| 监利县| 湾仔区| 开封市| 吉木萨尔县| 旺苍县| 玛纳斯县| 松滋市| 北碚区| 察雅县| 勃利县| 岳西县| 衡东县| 虞城县| 许昌县| 兴化市|