中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

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

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

        14,判斷字符是不是16進(jìn)值的數(shù)字

        #define HEXCHK( c ) ( ((c) >= '0' (c) = '9') ||

        ((c) >= 'A' (c) = 'F') ||

        ((c) >= 'a' (c) = 'f') )

        15,防止溢出的一個(gè)方法

        #define INC_SAT( val ) (val = ((val)+1 > (val)) ? (val)+1 : (val))

        16,返回?cái)?shù)組元素的個(gè)數(shù)

        #define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a[0]) ) )

        17,返回一個(gè)無符號數(shù)n尾的值MOD_BY_POWER_OF_TWO(X,n)=X%(2^n)

        #define MOD_BY_POWER_OF_TWO( val, mod_by )

        ( (dword)(val) (dword)((mod_by)-1) )

        18,對于IO空間映射在存儲空間的結(jié)構(gòu),輸入輸出處理

        #define inp(port) (*((volatile byte *) (port)))

        #define inpw(port) (*((volatile word *) (port)))

        #define inpdw(port) (*((volatile dword *)(port)))

        #define outp(port, val) (*((volatile byte *) (port)) = ((byte) (val)))

        #define outpw(port, val) (*((volatile word *) (port)) = ((word) (val)))

        #define outpdw(port, val) (*((volatile dword *) (port)) = ((dword) (val)))

        19,使用一些宏跟蹤調(diào)試

        A N S I標(biāo)準(zhǔn)說明了五個(gè)預(yù)定義的宏名。它們是:

        _ L I N E _

        _ F I L E _

        _ D A T E _

        _ T I M E _

        _ S T D C _

        如果編譯不是標(biāo)準(zhǔn)的,則可能僅支持以上宏名中的幾個(gè),或根本不支持。記住編譯程序也許還提供其它預(yù)定義的宏名。

        _ L I N E _及_ F I L E _宏指令在有關(guān)# l i n e的部分中已討論,這里討論其余的宏名。

        _ D AT E _宏指令含有形式為月/日/年的串,表示源文件被翻譯到時(shí)的日期。

        翻譯到目標(biāo)的時(shí)間作為串包含在_ T I M E _中。串形式為時(shí):分:秒。

        如果實(shí)現(xiàn)是標(biāo)準(zhǔn)的,則宏_ S T D C _含有十進(jìn)制常量1。如果它含有任何其它數(shù),則實(shí)現(xiàn)是非標(biāo)準(zhǔn)的。

        可以定義宏,例如: 當(dāng)定義了_DEBUG,輸出數(shù)據(jù)信息和所在文件所在行

        #ifdef _DEBUG

        #define DEBUGMSG(msg,date) printf(msg);printf(“%d%d%d”,date,_LINE_,_FILE_)

        #else

        #define DEBUGMSG(msg,date)

        #endif

        20,宏定義防止使用時(shí)錯(cuò)誤用小括號包含。

        例如:#define ADD(a,b) (a+b)

        用do{}while(0)語句包含多語句防止錯(cuò)誤

        例如:#difne DO(a,b) a+b;

        a++;

        應(yīng)用時(shí):if(….)

        DO(a,b); //產(chǎn)生錯(cuò)誤

        else

        解決方法: #difne DO(a,b) do{a+b;

        a++;}while(0)

        宏中"#"和"##"的用法

        一、一般用法

        我們使用#把宏參數(shù)變?yōu)橐粋€(gè)字符串,用##把兩個(gè)宏參數(shù)貼合在一起.

        用法:

        #include

        #include

        using namespace std;

        #define STR(s) #s

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

        int main()

        {

        printf(STR(vck)); // 輸出字符串"vck"

        printf("%dn", CONS(2,3)); // 2e3 輸出:2000

        return 0;

        }

        二、當(dāng)宏參數(shù)是另一個(gè)宏的時(shí)候

        需要注意的是凡宏定義里有用'#'或'##'的地方宏參數(shù)是不會再展開.

        1, 非'#'和'##'的情況

        #define TOW (2)

        #define MUL(a,b) (a*b)

        printf("%d*%d=%dn", TOW, TOW, MUL(TOW,TOW));

        這行的宏會被展開為:

        printf("%d*%d=%dn", (2), (2), ((2)*(2)));

        MUL里的參數(shù)TOW會被展開為(2).

        2, 當(dāng)有'#'或'##'的時(shí)候

        #define A (2)

        #define STR(s) #s

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

        printf("int max: %sn", STR(INT_MAX)); // INT_MAX #include

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




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

        評論


        相關(guān)推薦

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

        關(guān)閉