溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言#define語法的定義和用法

發(fā)布時(shí)間:2021-09-04 09:39:51 來源:億速云 閱讀:439 作者:chen 欄目:互聯(lián)網(wǎng)科技

這篇文章主要講解了“C語言#define語法的定義和用法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C語言#define語法的定義和用法”吧!

#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的語法:

語法一:

#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)注!

向AI問一下細(xì)節(jié)

免責(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)容。

AI