單片機C語言知識用法之#define

define的定義:

」開頭的均爲預處理命令,「define」爲宏定義命令,「標識符」爲所定義的宏名。

#define TIME_NUM  1000  //定義一個時間數複製代碼

一個簡單的TIME_NUM 就定義好了,它表明1000,若是在程序裏面寫:安全

if(i<TIME_NUM )
{
    ....
    ....
}複製代碼

編譯器在處理這個代碼以前會對TIME_NUM 進行處理替換爲1000。這樣的定義看起來相似於普通的常量定義CONST,但也有着不一樣,由於define的定義更像是簡單的文本替換,而不是做爲一個量來使用。函數

define的語法:

語法一:

#define      標識符    被標識符表明的字符串      //這種用法很簡單,就是一種替換.複製代碼

語法二:

#define     標識符[(參數1,.....,參數n)]      被標識符表明的字符串        //其中,在 "被標識符表明的字符串" 中出現的形參將在使用時被實參替代. 就像寫函數同樣.複製代碼

例如:spa

#define    ADD_NUM     10   複製代碼

也能夠這樣子用:指針

#define    ADD(x,y)     (x+y)複製代碼

這個定義就將返回兩個數中較大的那個,看到了嗎?由於這個「函數」沒有類型檢查,就好像一個函數模板似的,固然,它絕對沒有模板那麼安全就是了。能夠做爲一個簡單的模板來使用而已。可是這樣作的話存在隱患,例子以下:code

#define ADD(a,b)   a+b複製代碼

在通常使用的時候是沒有問題的,可是若是遇到如:c Add(a,b) d的時候就會出現問題,代數式的本意是a+b而後去和c,d相乘,可是由於使用了define(它只是一個簡單的替換),因此式子實際上變成了  ca + bd 因此,用#define要注意順序cdn

通常我我的用#define在單片機程序上的話,我通常只作簡單的替換。開發

#define TIME_NUM   (60*60*24)UL//定義一個一天時間有多少秒複製代碼

另外舉一個例子:字符串

#define pin (int*);
pin a,b;複製代碼

本意是a和b都是int型指針,可是實際上變成int* a,b;a是int型指針,而b是int型變量。這是應該使用typedef來代替define,這樣a和b就都是int型指針了。因此咱們在定義的時候,養成一個良好的習慣,建議全部的層次都要加括號。編譯器

並且,宏在單片機代碼中用的不少,常數的替換、地址的偏移,等等都用得上用宏來修改移植代碼更加便捷,代碼更容易令人讀懂。。。。it

喜歡就關注我吧!

歡迎關注我公衆號

相關代碼能夠在公衆號後臺獲取。

歡迎關注「物聯網IoT開發」公衆號

相關文章
相關標籤/搜索