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