一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

C語言中的宏定義

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

#define命令是C語言中的一個宏定義命令,它用來將一個標識符定義為一個字符串,該標識符被稱為宏名,被定義的字符串稱為替換文本。命令有兩種格式:一種是簡單的宏定義,另一種是帶參數(shù)的宏定義。

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

(1)簡單的宏定義:#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)之間存在一個空格,導(dǎo)致變成了如下定義:

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

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

    關(guān)注

    180

    文章

    7628

    瀏覽量

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

    關(guān)注

    0

    文章

    51

    瀏覽量

    9154
收藏 人收藏

    評論

    相關(guān)推薦

    C語言中常用的定義

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

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

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

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

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

    C語言中定義的使用技巧

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

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

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

    labview中有類似于c語言中定義

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

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

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

    c語言中定義是什么意思

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

    c語言中常用的定義有哪些?

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

    C語言中是什么

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

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

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

    匯總和深挖C語言中定義所有的知識點

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

    深度解讀定義所有的知識點

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

    c語言定義可以嵌套嗎?

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

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

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