0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言中的宏定義

嵌入式應(yīng)用開(kāi)發(fā) ? 來(lái)源:嵌入式應(yīng)用開(kāi)發(fā) ? 作者:嵌入式應(yīng)用開(kāi)發(fā) ? 2022-09-28 16:05 ? 次閱讀

#define命令是C語(yǔ)言中的一個(gè)宏定義命令,它用來(lái)將一個(gè)標(biāo)識(shí)符定義為一個(gè)字符串,該標(biāo)識(shí)符被稱為宏名,被定義的字符串稱為替換文本。命令有兩種格式:一種是簡(jiǎn)單的宏定義,另一種是帶參數(shù)的宏定義。

1.不帶參數(shù)的宏定義:
宏定義又稱為宏代換、宏替換,簡(jiǎn)稱“宏”。
格式:
#define 標(biāo)識(shí)符 字符串
其中的標(biāo)識(shí)符就是所謂的符號(hào)常量,也稱為“宏名”。
預(yù)處理(預(yù)編譯)工作也叫做宏展開(kāi):將宏名替換為字符串。
掌握"宏"概念的關(guān)鍵是“換”。一切以換為前提、做任何事情之前先要換,準(zhǔn)確理解之前就要“換”。
即在對(duì)相關(guān)命令或語(yǔ)句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中出現(xiàn)的PI全部換成3.1415926
說(shuō)明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯(cuò)誤和便于修改。例如:數(shù)組大小常用宏定義
(3)預(yù)處理是在編譯之前的處理,而編譯工作的任務(wù)之一就是語(yǔ)法檢查,預(yù)處理不做語(yǔ)法檢查。
(4)宏定義末尾不加分號(hào);
(5)宏定義寫在函數(shù)的花括號(hào)外邊,作用域?yàn)槠浜蟮某绦?,通常在文件的最開(kāi)頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義可以嵌套
(8)字符串" "中永遠(yuǎn)不包含宏
(9)宏定義不分配內(nèi)存,變量定義分配內(nèi)存。
2.帶參數(shù)的宏:
除了一般的字符串替換,還要做參數(shù)代換
格式:
#define 宏名(參數(shù)表) 字符串
例如:#define S(a,b) a*b
area=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;
類似于函數(shù)調(diào)用,有一個(gè)啞實(shí)結(jié)合的過(guò)程:
(1)實(shí)參如果是表達(dá)式容易出問(wèn)題
#define S(r) r*r
area=S(a+b);第一步換為area=r*r;,第二步被換為area=a+b*a+b;
正確的宏定義是#define S(r) (r)*(r)
(2)宏名和參數(shù)的括號(hào)間不能有空格
(3)宏替換只作替換,不做計(jì)算,不做表達(dá)式求解
(4)函數(shù)調(diào)用在編譯后程序運(yùn)行時(shí)進(jìn)行,并且分配內(nèi)存。宏替換在編譯前進(jìn)行,不分配內(nèi)存
(5)宏的啞實(shí)結(jié)合不存在類型,也沒(méi)有類型轉(zhuǎn)換。
(6)函數(shù)只有一個(gè)返回值,利用宏則可以設(shè)法得到多個(gè)值
(7)宏展開(kāi)使源程序變長(zhǎng),函數(shù)調(diào)用不會(huì)
(8)宏展開(kāi)不占運(yùn)行時(shí)間,只占編譯時(shí)間,函數(shù)調(diào)用占運(yùn)行時(shí)間(分配內(nèi)存、保留現(xiàn)場(chǎng)、值傳遞、返回值)

(1)簡(jiǎn)單的宏定義:#define<宏名><字符串>

#defineVALUE((sizeof(a))/sizeof(a[0]))

(2)帶參數(shù)的宏定義#define<宏名> (<參數(shù)表>)<宏體>

#defineMAX(a,b)((a)>(b)?(a):(b))

2、不能忽略宏定義中的空格

下面的宏定義中,f是否帶了參數(shù)呢?

#definef(x)((x)+1)

答案是否定的,在f與(x)之間存在一個(gè)空格,導(dǎo)致變成了如下定義:

#define  f   (x)((x)+1)
poYBAGM0ADeACSuDAABCskHOT70774.png

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7594

    瀏覽量

    135857
  • 宏定義
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    8996
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中常用的定義

    寫好C語(yǔ)言,漂亮的定義很重要,使用定義可以防止出錯(cuò),提高可移植性,可讀性,方便性等等。下面列
    發(fā)表于 10-18 10:05 ?1642次閱讀

    C語(yǔ)言中預(yù)定義的用法和使用場(chǎng)景

    C語(yǔ)言中,預(yù)定義是由編譯器提供的一組特殊標(biāo)識(shí)符,可以在程序中直接使用,無(wú)需進(jìn)行額外的定義
    發(fā)表于 08-16 16:12 ?442次閱讀

    C語(yǔ)言中定義的應(yīng)用

    C語(yǔ)言中,定義是一種預(yù)處理指令,用于在代碼中定義和使用常量、函數(shù)或代碼片段的替代。
    發(fā)表于 08-17 15:33 ?727次閱讀

    C語(yǔ)言中定義的使用技巧

    #define命令是C語(yǔ)言中的一個(gè)定義命令,它用來(lái)將一個(gè)標(biāo)識(shí)符定義為一個(gè)字符串,該標(biāo)識(shí)符被稱為
    發(fā)表于 09-05 10:12 ?979次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b><b class='flag-5'>宏</b><b class='flag-5'>定義</b>的使用技巧

    讓keil編輯器支持二進(jìn)制數(shù)據(jù)

    了,在這里與大家分享一個(gè)簡(jiǎn)單的實(shí)現(xiàn)方法。就是利用C語(yǔ)言中定義#defineB0010_00000x20有了這樣的
    發(fā)表于 05-02 19:10

    labview中有類似于c語(yǔ)言中定義

    如題,labview中有類似于c語(yǔ)言中定義嗎 define xxx XXX。。。多謝~
    發(fā)表于 10-05 15:04

    STM32入門系列-使用C語(yǔ)言封裝寄存器

    根據(jù)寄存器的概念,我們可以使用 C 語(yǔ)言中定義對(duì)寄存器進(jìn)行定義。具體代碼如下: //定義
    發(fā)表于 11-24 10:33

    c語(yǔ)言中定義是什么意思

    #define CLASS(type) \typedef struct type type; \struct type搞不清楚這個(gè)是什么意思。。。求解釋。
    發(fā)表于 03-12 04:20

    c語(yǔ)言中常用的定義有哪些?

    c語(yǔ)言中常用的定義有哪些?
    發(fā)表于 04-28 06:01

    C語(yǔ)言中是什么

    第五章 性能優(yōu)化5.1 使用定義  在C語(yǔ)言中,是產(chǎn)生內(nèi)嵌代碼的唯一方法。對(duì)于嵌入式系統(tǒng)而言,為了能達(dá)到性能要求,
    發(fā)表于 12-15 08:20

    #ifndef、#def、#endif使用方法

    詳細(xì)介紹了C語(yǔ)言中定義的用法,條件編譯,定義
    發(fā)表于 11-17 10:30 ?9次下載

    匯總和深挖C語(yǔ)言中定義所有的知識(shí)點(diǎn)

    知識(shí)點(diǎn)在剛開(kāi)始接觸時(shí),我感覺(jué)比較難懂、不好理解,那么以后不論我花多長(zhǎng)時(shí)間去研究這個(gè)知識(shí)點(diǎn),心里會(huì)一直認(rèn)為該知識(shí)點(diǎn)比較難,也就是說(shuō)第一印象特別的重要。 就比如 C 語(yǔ)言中定義,好像跟
    的頭像 發(fā)表于 05-03 18:31 ?2639次閱讀
    匯總和深挖<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b><b class='flag-5'>宏</b><b class='flag-5'>定義</b>所有的知識(shí)點(diǎn)

    深度解讀定義所有的知識(shí)點(diǎn)

    難,也就是說(shuō)第一印象特別的重要。 就比如 C 語(yǔ)言中定義,好像跟我犯沖一樣,我一直覺(jué)得定義
    的頭像 發(fā)表于 05-25 10:14 ?2981次閱讀
    深度解讀<b class='flag-5'>宏</b><b class='flag-5'>定義</b>所有的知識(shí)點(diǎn)

    c語(yǔ)言定義可以嵌套嗎?

    c語(yǔ)言定義可以嵌套嗎? C語(yǔ)言
    的頭像 發(fā)表于 09-04 17:38 ?3072次閱讀

    c語(yǔ)言帶參數(shù)的定義

    c語(yǔ)言帶參數(shù)的定義? C語(yǔ)言
    的頭像 發(fā)表于 09-04 17:45 ?2328次閱讀