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

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

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

3天內不再提示

關于宏定義的錯誤理解

嵌入式應用開發 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-09-28 16:07 ? 次閱讀

宏不是函數如果我們定義一個宏:

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

當我們執行一個語句:


3+MAX(1,3);

我們期望的答案應該是6才對,其實呢,運行之后的答案1。與宏定義相掛鉤的就是優先級,算數運算符的優先級高于條件運算符,展開如下:

3+1>3?1:3,首先進行算符運算符的運算,即4>3?1:3,所以答案為1。請注意宏定義中的括號,這些括號的作用就是預防引起優先級相關的問題。有些專家建議在

C語言中只要牢記兩個優先級就夠了,乘除法優先級高于加減法,在設計其它操作符時,一律加上括號。

4、宏定義不是說明或語句,在行末不必加分號

比如,加上分號則連分號也一起置換。

5、宏不是類型定義

首先定義一個宏:

#definepCharchar*

再用pChar 定義兩個變量,之后用操作符sizeof讀取變量所占用內存大小,如果是指針類型的就占4個字節,如果是字符型的就占1個字節。

poYBAGM0ALSAdLJSAAH0yHnzcoM328.png

結果占用空間不一樣,變量類型自然不一樣,所以宏定義不是類型定義。那么,如果我換成typedef來定義類型呢?

poYBAGM0AKeAbwHnAAB2JfN4a2w589.png

宏定義只是簡單的字符串代換,是在預處理完成的,而typedef是在編譯時處理的,它不是作簡單的代換,而是對類型說明符重新命名。被命名的標識符具有類型定義說明。

6、與之相關的宏定義

編寫程序過程中,很多都需要條件編譯,來看一個常用的使用方法。

#if defined(CREDIT)

7、總結

宏的本質是代碼替換。

審核編輯:湯梓紅

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

    關注

    180

    文章

    7630

    瀏覽量

    140611
  • 宏定義
    +關注

    關注

    0

    文章

    51

    瀏覽量

    9188
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    C語言定義使用技巧

    寫好C語言,漂亮的定義很重要,使用定義可以防止出錯,提高可移植性,可讀性,方便性等等。下面列舉一些成熟軟件中常用的
    發表于 07-29 09:35 ?1219次閱讀

    關于定義的問題,涉及##和#

    想通過定義來實現,如下面格式#define link(arg) RCC_APB2Periph_##arg返回的結果為RCC_APB2Periph_GPIOC,以方便在時鐘使能函數中使用請教該怎么實現——來自
    發表于 04-20 23:33

    請問這個#define A (1)定義該怎么理解

    在讀程序的過程中遇到了這樣的一個定義,求大神解釋應該怎么理解?括號不知道該怎么理解.......
    發表于 10-11 01:01

    如何理解定義的這種寫法?

    = D)以上3行代碼出自國外一芯片驅動代碼中第2行與第3行函數中的參數用的是第1行的,但是這個寫法不是很理解,這種寫法正確不?第2行與第3行函數中的參數 REG_ 就可以表示
    發表于 10-16 00:13

    定義理解

    工程目標:實現按鍵長按,短按,雙擊,單機調用不同的回調函數,執行不同的命令。定義:#define TRIGGER_CB(event)\if(btn->CallBack_Function
    發表于 01-05 06:58

    怎么去解決結構體指針定義錯誤的問題呢

    error:expected identifier before ‘(’ token,結構體指針定義錯誤編譯時彈出標題所示錯誤,一般為
    發表于 02-28 07:22

    C語言定義使用技巧

    寫好C語言,漂亮的定義很重要,使用定義可以防止出錯,提高可移植性,可讀性,方便性 等等。下面列舉一些成熟軟件中常用得
    發表于 11-13 12:04 ?36次下載

    內聯函數和定義的區別介紹

    定義是C語言提供的三種預處理功能的其中一種,這三種預處理包括:定義、文件包含、條件編譯。定義
    發表于 12-15 15:33 ?2456次閱讀
    內聯函數和<b class='flag-5'>宏</b><b class='flag-5'>定義</b>的區別介紹

    不帶參數的定義是什么?不帶參數的定義的資料介紹詳細過程概述

    c語言中有一個定義,其中有一類就是不帶參數的定義定義是C提供的三種預處理功能的其中一
    發表于 09-04 15:38 ?5次下載

    如何理解CMSIS-RTOS API和定義

    定義中的 instances 表示基于此任務參數,創建出幾個任務實例,比如instances為2,則會創建出兩個任務。
    的頭像 發表于 08-26 11:54 ?2951次閱讀
    如何<b class='flag-5'>理解</b>CMSIS-RTOS API和<b class='flag-5'>宏</b><b class='flag-5'>定義</b>

    對于定義與重復定義的問題

    對于定義與重復定義的問題
    發表于 11-29 18:21 ?1次下載
    對于<b class='flag-5'>宏</b><b class='flag-5'>定義</b>與重復<b class='flag-5'>定義</b>的問題

    C語言基礎:定義使用do{}while(0)的好處

    推薦用do{}while(0)這種用法呢?主要有兩點原因,一個是代碼適應性以及拓展性,第二個是為了盡量避免一些不必要的語法和邏輯錯誤。比如保證你定義的函數能夠在形如if...else的語句中保持多重操...
    發表于 01-13 13:06 ?2次下載
    C語言基礎:<b class='flag-5'>宏</b><b class='flag-5'>定義</b>使用do{}while(0)的好處

    error:expected identifier before ‘(‘ token,結構體指針定義錯誤

    error:expected identifier before ‘(’ token,結構體指針定義錯誤編譯時彈出標題所示錯誤,一般為
    發表于 01-13 15:42 ?11次下載
    error:expected identifier before ‘(‘ token,結構體指針<b class='flag-5'>宏</b><b class='flag-5'>定義</b><b class='flag-5'>錯誤</b>

    C語言中的定義

    #define命令是C語言中的一個定義命令,它用來將一個標識符定義為一個字符串,該標識符被稱為名,被定義的字符串稱為替換文本。命令有兩種
    的頭像 發表于 09-28 16:05 ?3865次閱讀
    C語言中的<b class='flag-5'>宏</b><b class='flag-5'>定義</b>

    c語言帶參數的定義

    c語言帶參數的定義? C語言定義是一種替換機制,它可以將一個標識符替換為一個代碼片段。
    的頭像 發表于 09-04 17:45 ?2844次閱讀
    主站蜘蛛池模板: 美女视频一区二区三区在线 | 黄视频免费在线看 | videosgratis乱色欧美野外 | 国产成人精品日本亚洲网站 | 1024成人| 天天躁狠狠躁夜夜躁2021 | 久久dvd | wwwxx在线 | 狠狠躁夜夜躁人人爽天天天天 | 美女扒开内裤无遮挡禁18 | 天堂网在线看 | 免费日本黄色网址 | 在线播放一区二区三区 | 激情五月激情综合色区 | 免费啪啪网 | 黄色三级视频 | 国产在线美女 | 久久婷五月综合 | 午夜毛片免费观看视频 | 天天爱天天射 | 欧美成人观看免费全部完小说 | 国产精品久久久久久久久久妇女 | 国产婷婷 | 亚洲大色 | 欧美日韩国产一区二区 | 亚洲区一二三四区2021 | 国产黄色录像视频 | 五月婷婷六月色 | 中文字幕亚洲天堂 | 久久深夜福利 | 欧美黄色片 一级片 | 免费观看在线永久免费xx视频 | 天天操天天舔 | 日本肥妇 | 欧美黑人性受xxxx喷水 | 午夜日本一区二区三区 | 亚洲综合色一区二区三区小说 | 久久不射影院 | 亚洲美女精品 | 色女孩网站 | 99热久 |