chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何才能避免【宏】的這七個誤區(qū)

電子設(shè)計 ? 來源:電子設(shè)計 ? 作者:電子設(shè)計 ? 2020-12-24 14:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

語法錯誤

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

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

#define call_with_1(x) x(1)

call_with_1 (twice)

//x=1

→ twice(1)

→ (2*(1))

宏定義不必帶有括號,通過在宏主體中編寫不平衡的開放括號,可以創(chuàng)建一個從宏主體內(nèi)部開始但在宏主體外部結(jié)束的宏調(diào)用。例如,

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

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

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

運算符優(yōu)先級問題

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

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

假定其用法如下:

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

拓展開是

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

這沒有達到我們的預(yù)期,C的運算符優(yōu)先級規(guī)則使其等效于此,而我們想要的是:

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

如果我們將宏定義為

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

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

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

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

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

吞噬分號

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

#define SKIP_SPACES(p, limit)

{ char *lim = (limit);

while (p < lim) {

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

p--; break; }}}

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

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

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

if (*p ?。?0)

SKIP_SPACES (p, lim);

else …

在if條件和else條件之間存在兩個語句(復(fù)合語句和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);

這是一個陳述,循環(huán)僅執(zhí)行一次,而且大多數(shù)編譯器不會為此生成任何額外的代碼。

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

    關(guān)注

    3

    文章

    4400

    瀏覽量

    66368
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4922

    瀏覽量

    72239
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    成功使用工業(yè)化超聲波清洗設(shè)備的七個實用技巧

    成功使用工業(yè)化超聲波清洗設(shè)備的七個實用技巧工業(yè)化超聲波清洗設(shè)備在現(xiàn)代制造業(yè)中起到至關(guān)重要的作用,但要充分發(fā)揮它們的效能,需要掌握一些實用技巧。本文將為您介紹成功使用工業(yè)化超聲波清洗設(shè)備的七個實用技巧
    的頭像 發(fā)表于 06-25 17:33 ?378次閱讀
    成功使用工業(yè)化超聲波清洗設(shè)備的<b class='flag-5'>七個</b>實用技巧

    使用集TELE NA003-M64繼電器,避免光伏發(fā)電系統(tǒng)的異常電流饋入電網(wǎng)

    如何避免光伏發(fā)電因不穩(wěn)定而損害電網(wǎng)?使用集NA003-M64電力保護器即可幫您監(jiān)測電流,實現(xiàn)電網(wǎng)和系統(tǒng)保護!
    的頭像 發(fā)表于 05-22 11:08 ?466次閱讀
    使用<b class='flag-5'>宏</b>集TELE NA003-M64繼電器,<b class='flag-5'>避免</b>光伏發(fā)電系統(tǒng)的異常電流饋入電網(wǎng)

    濾波器接地設(shè)計有哪些常見誤區(qū)?

    濾波器接地設(shè)計對電子設(shè)備EMC至關(guān)重要,需避免接地線過長、殼體搭接不良、輸入輸出線平行走線、接地線過細及忽視高頻特性等誤區(qū),采用短接地線、良好搭接、分開布線、合適接地材料及優(yōu)化布局等方法提高濾波器性能。
    的頭像 發(fā)表于 02-26 17:23 ?543次閱讀
    濾波器接地設(shè)計有哪些常見<b class='flag-5'>誤區(qū)</b>?

    如何避免直流負載箱的常見操作誤區(qū)

    以下是一些避免直流負載箱常見操作誤區(qū)的方法: 選型與安裝 正確選型:根據(jù)實際需求,準確選擇直流負載箱的額定電壓、額定電流等參數(shù),使其與被測設(shè)備相匹配,避免因參數(shù)不匹配導(dǎo)致過載或欠載現(xiàn)象。 合理安裝
    發(fā)表于 02-13 13:49

    ABB能源自動化選用集Cogent DataHub避免DCOM問題,實現(xiàn)高效、安全的數(shù)據(jù)傳輸

    ABB能源自動化公司通過集Cogent DataHub隧道/鏡像解決方案,將電廠設(shè)施的數(shù)據(jù)實時傳輸?shù)焦巨k公室,避免了傳統(tǒng)DCOM方式帶來的風險,在電廠和公司網(wǎng)絡(luò)之間建立了一安全、可靠的連接。
    的頭像 發(fā)表于 02-12 10:56 ?579次閱讀
    ABB能源自動化選用<b class='flag-5'>宏</b>集Cogent DataHub<b class='flag-5'>避免</b>DCOM問題,實現(xiàn)高效、安全的數(shù)據(jù)傳輸

    ADS805E的轉(zhuǎn)換結(jié)果要延后六采樣周期才輸出嗎?

    采樣周期的數(shù)據(jù)是無效的,從第七個采樣周期開始才為有效數(shù)據(jù)?即第七個采樣周期開始數(shù)據(jù)有效,Analog In中的N+6點對應(yīng)的轉(zhuǎn)換后的Data Out中的N
    發(fā)表于 01-23 07:50

    OTL電路設(shè)計中的常見誤區(qū)

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

    無線充電原理的常見誤區(qū)

    隨著智能手機和其他便攜式設(shè)備的普及,無線充電技術(shù)越來越受到關(guān)注。然而,盡管這項技術(shù)已經(jīng)取得了顯著進展,但公眾對其工作原理和能力的理解仍然存在一些誤區(qū)。 誤區(qū)一:無線充電是新技術(shù) 誤區(qū)解釋: 許多人
    的頭像 發(fā)表于 12-28 13:51 ?918次閱讀

    DFT的常見誤區(qū)與解決方案

    DFT(離散傅里葉變換)在信號處理領(lǐng)域具有廣泛的應(yīng)用,但在使用過程中也常會遇到一些誤區(qū)。以下是對DFT常見誤區(qū)的總結(jié)以及相應(yīng)的解決方案: 常見誤區(qū) 混疊現(xiàn)象 : 誤區(qū)描述:在采樣過程中
    的頭像 發(fā)表于 12-20 09:32 ?1771次閱讀

    Micro USB接口應(yīng)避免的使用誤區(qū)

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

    如何通過OSI層模型優(yōu)化網(wǎng)絡(luò)性能

    OSI(Open Systems Interconnection)層模型是一種標準的網(wǎng)絡(luò)分層模型,將網(wǎng)絡(luò)功能分為七個不同的層次,每個層次都有獨立的功能和協(xié)議,可以獨立地實現(xiàn)和升級。通過優(yōu)化OSI
    的頭像 發(fā)表于 11-24 11:14 ?1427次閱讀

    OSI層模型在網(wǎng)絡(luò)故障排查中的應(yīng)用

    層模型在網(wǎng)絡(luò)故障排查中的具體應(yīng)用: 一、OSI層模型概述 OSI層模型是一概念性的框架,它將網(wǎng)絡(luò)通信的功能劃分為七個層次。這些層次從低到高分別是:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸
    的頭像 發(fā)表于 11-24 11:01 ?2075次閱讀

    如何理解OSI層模型 OSI層模型在網(wǎng)絡(luò)中的應(yīng)用

    ,旨在幫助不同計算機系統(tǒng)之間實現(xiàn)互操作性。OSI模型將網(wǎng)絡(luò)通信過程劃分為七個層次,每一層都有其特定的功能和協(xié)議。以下是對OSI層模型的簡要介紹以及它們在網(wǎng)絡(luò)中的應(yīng)用。 物理層(Physical
    的頭像 發(fā)表于 11-24 10:48 ?1499次閱讀

    OSI層模型詳解 OSI層模型與TCP/IP模型比較

    OSI(Open System Interconnect)層模型是一種將計算機網(wǎng)絡(luò)通信協(xié)議劃分為七個不同層次的標準化框架,每一層都負責不同的功能,從物理連接到應(yīng)用程序的處理。以下是對OSI層模型
    的頭像 發(fā)表于 11-24 10:44 ?1677次閱讀

    邏輯異或的常見誤區(qū)及解決方法

    用于布爾值(真/假)之間的運算,其結(jié)果是基于輸入值的邏輯差異。 按位異或則用于整數(shù)或二進制數(shù)的每一位進行異或運算,其結(jié)果是一新的二進制數(shù)。 誤區(qū)在于有時會將兩者混淆,尤其是在編程環(huán)境中,如Python中的 ^ 是按位異或運算符,而不是邏輯異或。 誤解異
    的頭像 發(fā)表于 11-19 09:56 ?1285次閱讀