在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

如何才能避免【宏】的這七個誤區

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-24 14:29 ? 次閱讀

語法錯誤

當使用參數調用宏時,會將參數替換為宏主體,并與其他輸入文件一起檢查結果,以進行更多的宏調用,可以將部分來自宏主體和部分自變量的宏調用組合在一起。例如,

#define twice(x) (2*(x))

#define call_with_1(x) x(1)

call_with_1 (twice)

//x=1

→ twice(1)

→ (2*(1))

宏定義不必帶有括號,通過在宏主體中編寫不平衡的開放括號,可以創建一個從宏主體內部開始但在宏主體外部結束的宏調用。例如,

#define strange(file) fprintf (file, "%s %d",

strange(stderr) p, 35)
→ fprintf (stderr, "%s %d", p, 35)

組合宏調用的功能可能會很有用,但是在宏主體中使用不平衡的開放括號只會造成混淆,應該避免。

運算符優先級問題

在大多數宏定義示例中,每次出現的宏參數名稱都帶有括號,并且另一對括號通常會包圍整個宏定義,這是編寫宏最好的方式。舉個例子

#define ceil_div(x, y) (x + y - 1) / y

假定其用法如下:

a = ceil_div(b&c,sizeof(int));

拓展開是

a =(b&c + sizeof(int)-1)/ sizeof(int);

這沒有達到我們的預期,C的運算符優先級規則使其等效于此,而我們想要的是:

a =(((b&c)+ sizeof(int)-1))/ sizeof(int);

如果我們將宏定義為

#define ceil_div(x,y)((x)+(y)-1)/(y)

可能導致另一種情況,sizeof ceil_div(1,2)是一個C表達式,可以計算ceil_div(1,2)類型的大小,它擴展為:

sizeof((1)+(2)-1)/(2)

這將采用整數的大小并將其除以2,而除法包含在內部的sizeof之外。所以整個宏定義的括號可防止此類問題。那么,下面是定義ceil_div的正確方法如下

#define ceil_div(x,y)((((x)+(y)-1)/(y))

吞噬分號

通常需要定義一個擴展為復合語句的宏。例如,考慮以下宏,該宏跨空格字符前進一個指針(參數p表示在何處查找):

#define SKIP_SPACES(p, limit)

{ char *lim = (limit);

while (p < lim) {

if (*p++ ?。?' ') {

p--; break; }}}

該宏定義必須是單個邏輯行,嚴格來說,該調用擴展為復合語句,這是一個完整的語句,不需要用分號結束。

但是,由于它看起來像函數調用,因此,如果可以像使用函數調用一樣使用它,則可以最大程度地減少混亂,然后再寫一個分號,就像在SKIP_SPACES(p,lim)中一樣。

這可能會在else語句之前出問題,因為分號實際上是空語句。假設你寫

if (*p ?。?0)

SKIP_SPACES (p, lim);

else …

在if條件和else條件之間存在兩個語句(復合語句和null語句)使C代碼無效。

怎么解決?我們可以使用do…while語句更改宏SKIP_SPACES的定義以解決此問題。方法如下:

#define SKIP_SPACES(p, limit)

do { char *lim = (limit);

while (p < lim) {

if (*p++ != ' ') {

p--; break; }}}

while (0)

SKIP_SPACES (p, lim);擴展為

do {…} while (0);

這是一個陳述,循環僅執行一次,而且大多數編譯器不會為此生成任何額外的代碼。

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4344

    瀏覽量

    62839
  • 代碼
    +關注

    關注

    30

    文章

    4814

    瀏覽量

    68849
收藏 人收藏

    評論

    相關推薦

    OTL電路設計中的常見誤區

    輸出變壓器 OTL電路的名稱可能會讓人誤以為它完全不需要變壓器。實際上,OTL電路中的“無輸出變壓器”是指不需要傳統的音頻輸出變壓器,但可能仍然需要一直流偏置變壓器來為輸出級提供適當的偏置電壓。 避免方法: 在設計OTL電路時,應充分
    的頭像 發表于 01-16 09:39 ?67次閱讀

    Micro USB接口應避免的使用誤區

    Micro USB接口在使用中應避免以下幾個誤區: 一、插拔不當 暴力插拔 :避免直接用手扯著連接插頭的電線拉扯或用力拔出。這種暴力的插拔方式可能導致Micro USB接口的插板損壞,甚至導致接口
    的頭像 發表于 11-27 10:14 ?365次閱讀

    單片機方案開發-分享七個常用的外圍電路設計

    在電子產品電路開發設計中,外圍電路設計是連接主控芯片與外部世界的關鍵橋梁,它直接影響著整個產品的性能、穩定性及功耗。今天,今天英銳恩科技的技術小編跟大家分享七個常用的外圍電路設計,助電子工程師們
    發表于 09-24 15:59

    放大器OPA548的七個針腳與電源和負載是怎么接線的?

    請問:放大器OPA548的七個針腳與電源和負載是怎么接線的?
    發表于 09-23 08:19

    劍下天山》之“劍利刃”:“新一代”漏洞掃描管理系統

    。該平臺七個方面功能尤其強大,堪稱梁羽生的武俠小說《劍下天山》之“劍利刃”: ?日月劍?:多租戶管理。不同租戶間能設置符合各租戶自身特點的漏洞掃描策略,并只能查看當前租戶的漏洞分別情況;平臺管理員能進行全
    的頭像 發表于 09-09 11:23 ?398次閱讀

    段數碼管怎么判斷共陰共陽

    段數碼管是一種常見的顯示設備,用于顯示數字和字母。它由七個發光二極管(LED)組成,每個LED可以獨立控制,以形成不同的數字和字母。段數碼管有兩種類型:共陰和共陽。這兩種類型的數碼管在電路連接
    的頭像 發表于 08-28 16:17 ?1953次閱讀

    李彥:并非只需學習AI專業才能有所作為

    據8月19日消息,李彥在28屆百度Hackathon(黑客馬拉松)活動接受采訪時指出,在AI時代,年輕人并非只需要學習AI專業才能有所作為。
    的頭像 發表于 08-19 15:10 ?479次閱讀

    NE5534導入到Pspice只有七個腳,且按照生成的.lib文件對應的管腳連接的電路仿真出錯怎么解決?

    NE5534導入到Pspice只有七個腳 且按照生成的.lib文件對應的管腳連接的電路仿真出錯 求解NE5534的準確pspice模型
    發表于 08-15 08:10

    必看!光伏并網逆變器的3典型認識誤區

    必看!光伏并網逆變器的3典型認識誤區-古瑞瓦特 逆變器作為光伏系統的中樞控制器,對整個系統的運行和產出起到關鍵作用。當系統出現待機、停機、告警、故障、發電量未達預期、數據監控中斷等問題時,運維人員
    的頭像 發表于 07-11 16:32 ?1241次閱讀
    必看!光伏并網逆變器的3<b class='flag-5'>個</b>典型認識<b class='flag-5'>誤區</b>

    家用路由器使用中的誤區和解決方案

    家用路由器在使用過程中,用戶往往容易陷入一些誤區,如忽視設置、過度使用無線信號、不重視網絡安全以及忽視保養維護等。這些誤區不僅可能影響網絡的速度和穩定性,還可能帶來安全隱患。因此,了解并避免這些
    的頭像 發表于 04-17 11:17 ?437次閱讀

    如何避免工業級路由器使用誤區,提高網絡效率

    工業級路由器在工業自動化、物聯網等領域發揮著至關重要的作用。然而,由于其應用環境的特殊性,使用過程中容易出現一些誤區,導致網絡效率低下。本文將針對這些誤區,提出相應的解決方案,幫助讀者避免使用
    的頭像 發表于 04-12 14:15 ?306次閱讀

    貼片電容使用的四誤區

    貼片電容是一種常用的電子元件,具有優異的性能和可靠性,在各類電路中得到廣泛應用。貼片電容在電子電路中起著至關重要的作用,但在使用過程中,存在一些常見的誤區。以下是四主要的誤區誤區
    的頭像 發表于 04-12 11:32 ?454次閱讀
    貼片電容使用的四<b class='flag-5'>個</b><b class='flag-5'>誤區</b>

    華為MWC2024榮膺項GLOMO大獎,創新驅動移動通信行業發展

    華為在近期舉辦的MWC 2024會議上,獲得了七個GLOMO大獎。GLOMO大獎作為手機通訊行業最著名的獎項,經過業內頂尖專家們的嚴格評審,賦予了華為終端產業最高的榮譽。
    的頭像 發表于 03-05 14:49 ?992次閱讀

    路由器代理商如何避免常見的誤區?

    作為路由器代理商,要成功在競爭激烈的市場環境中立足,需對常見誤區保持清醒認識,并制定相應策略避免。從產品定位、渠道選擇和營銷策略等方面剖析,為可持續發展提供指導。
    的頭像 發表于 03-03 16:51 ?464次閱讀

    分布式控制系統的七個功能和應用

    分布式控制系統的七個功能和應用? 分布式控制系統是一種由多個獨立的控制單元組成的系統,每個控制單元負責系統中的一部分功能。它具有分散的、自治的特性,可以提高系統的可靠性、靈活性和可擴展性。分布式控制
    的頭像 發表于 02-01 10:51 ?1512次閱讀
    主站蜘蛛池模板: cum4k在线| 亚洲国产情侣偷自在线二页| 天天干天天操天天舔| 亚洲影视久久| 天天操天天干天天拍| 手机看日韩毛片福利盒子| 日本黄色录象| 国内精品第一页| 色爱综合区五月小说| 在线免费看污视频| 狠狠色噜噜狠狠狠狠91| 一级伦奸视频| 日本视频黄色| 国产一级一片免费播放视频| 97干97吻| 美女屁屁免费视频网站| 在线播放黄色网址| 欧美.亚洲.日本一区二区三区| 在线免费观看黄色小视频| 傲视影院午夜毛片| 视频一区二区在线播放| 在线观看精品视频看看播放| 天堂网www中文在线资源| 在线 色| 天天色天天拍| 免费毛片网| 艹逼视频免费看| 色天天干| dy888午夜秋霞影院不卡| 真人一级一级特黄高清毛片| 色九| 成熟妇女毛耸耸性视频| 欧美又粗又硬又大久久久| h小视频在线观看| 亚洲最大黄色网址| 欧美成人一区二区三区在线电影| 色婷婷影院在线视频免费播放| 欧美伦理影院| 亚洲日本高清| 777欧美| 亚洲国内精品自在线影视|