這篇文章主要講解了“C語言#define語法的定義和用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言#define語法的定義和用法”吧!
#define是C語言中的一個預處理指令,其中的“#”表示這是一條預處理命令·。凡是以“#”開頭的均為預處理命令,“define”為宏定義命令,“標識符”為所定義的宏名。
#define TIME_NUM 1000 //定義一個時間數
一個簡單的TIME_NUM 就定義好了,它代表1000,如果在程序里面寫:
if(i<TIME_NUM ) { .... .... }
編譯器在處理這個代碼之前會對TIME_NUM 進行處理替換為1000。這樣的定義看起來類似于普通的常量定義CONST,但也有著不同,因為define的定義更像是簡單的文本替換,而不是作為一個量來使用。
#define 標識符 被標識符代表的字符串 //這種用法很簡單,就是一種替換.
#define 標識符[(參數1,.....,參數n)] 被標識符代表的字符串 //其中,在 "被標識符代表的字符串" 中出現的形參將在使用時被實參替代. 就像寫函數一樣.
例如:
#define ADD_NUM 10
也可以這樣子用:
#define ADD(x,y) (x+y)
這個定義就將返回兩個數中較大的那個,看到了嗎? 因為這個“函數”沒有類型檢查,就好像一個函數模板似的,當然,它絕對沒有模板那么安全就是了??梢宰鳛橐粋€簡單的模板來使用而已。 但是這樣做的話存在隱患,例子如下:
#define ADD(a,b) a+b
在一般使用的時候是沒有問題的,但是如果遇到如:c * Add(a,b) * d的時候就會出現問題,代數式的本意是a+b然后去和c,d相乘,但是因為使用了define(它只是一個簡單的替換),所以式子實際上變成了 ca + bd 所以,用#define要注意順序
一般我個人用#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型指針了。 所以我們在定義的時候,養成一個良好的習慣,建議所有的層次都要加括號。
而且,宏在單片機代碼中用的很多,常數的替換、地址的偏移,等等都用得上 用宏來修改移植代碼更加便捷,代碼更容易使人讀懂。。。。
感謝各位的閱讀,以上就是“C語言#define語法的定義和用法”的內容了,經過本文的學習后,相信大家對C語言#define語法的定義和用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。