<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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空間映射在存儲(chǔ)空間的結(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ù)是不會(huì)再展開.

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

          #define TOW (2)

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

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

          這行的宏會(huì)被展開為:

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

          MUL里的參數(shù)TOW會(huì)被展開為(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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();