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

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

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

3天內不再提示

詳解#define的奇妙用法

STM32嵌入式開發 ? 來源:CSDN技術社區 ? 作者:CSDN技術社區 ? 2022-03-22 09:03 ? 次閱讀

在 C/C++ 編程語言中,當程序被編譯時,被發送到編譯器,編譯器將程序轉換為機器語言,然后完成編譯并執行該程序。處理器也稱為宏預處理器。C /C++中的宏可以定義為一組程序語句,并在必須使用這些代碼集時使用該名稱。

這些宏始終以符號“#”開頭,以該符號開頭的語句由編譯器調用。

#define 奇妙用法

  • 特殊符號:#,##,#@

該宏還可用于傳遞可以通過在標記前使用“#”特殊符號將其轉換為字符串的標記。讓我們看一個例子:

#include #define GET_STRING(n) #n
int main(int argc, char *argv[]){ printf("%s
", GET_STRING(minger)); return 0;}

4482bacc-a91f-11ec-952b-dac502259ad0.png

在上面的代碼中,我們定義了類似函數的宏,其中參數“n”與“#n”一起傳遞,這將允許您檢索字符串文字。

該宏還支持將可以傳遞給宏以使用特殊運算符“##”連接字符串。讓我們看一個例子:

#include #define CONCATE(p, q) p##qint main(int argc, char *argv[]){ printf("%d 
", CONCATE(12, 13)); return 0;}

449dcd62-a91f-11ec-952b-dac502259ad0.png

上面的代碼定義了類似函數的宏,其中傳遞令牌以連接“p”和“q”兩個值。

下面我們接著看看#@使用。

#include #define TO_STRING(s) #s
int main(int argc, char *argv[]){ printf("%s
", TO_STRING(812)); return 0;}

44b3a254-a91f-11ec-952b-dac502259ad0.png

在上面的代碼中,我們定義了類似函數的宏,#s 表示用雙引號包括參數s,返回一個字符串。

  • 多行宏

類似對象的宏可以有多行。因此,要創建多行宏,您必須使用反斜杠換行符。

#include  #define ELE 1,             2,             3int main(int argc, char *argv[]){ int i = 0;    int arr[] = { ELE };    printf("Elements of Array are:
");     for (i = 0; i < 3; i++)  {        printf("%d  ", arr[i]);    } printf("
");     return 0;}

44c3cf3a-a91f-11ec-952b-dac502259ad0.png

宏也可以寫成多行,語句以“”開頭,不需要以“”結尾。讓我們再看一個例子:

#include  #define MACRO(n, limit) while (n < limit) { printf("minger "); n++; }int main(int argc, char *argv[]){ int n = 0; MACRO(n, 5); printf("
"); return 0;}

44d7abd6-a91f-11ec-952b-dac502259ad0.png

  • 可變參數宏

可變參數宏是具有可變數量參數的宏(也可以用 C 編寫可變參數函數)。下面是一個例子:

#include #define debugPrintf(...) printf("DEBUG: " __VA_ARGS__);int main(int argc, char** argv){ debugPrintf("Hello World!
"); return 0;}

44ee94e0-a91f-11ec-952b-dac502259ad0.png

簡單來說,...表示所有剩下的參數,__VA_ARGS__被宏定義中的...參數所替換。這在c語言的GNU擴展語法里是一個特殊規則:當__VA_ARGS__為空時,會消除前面這個逗號。

  • 條件編譯
#include#define debugPrintf /*定義一個宏開關,屏蔽則關閉,不屏蔽則打開 */#ifdef debugPrintf#define debugPrintf(...) printf("DEBUG: " __VA_ARGS__);#else#define debugPrintf(...)#endifint main(int argc, char** argv){ debugPrintf(" This is  Debug info
"); printf(" This is  printf  info
"); return 0;}

4507dcc0-a91f-11ec-952b-dac502259ad0.png

如果我們要輸出DEBUG版本,則打開這個宏開關(不屏蔽#define debugPrintf ),此時所有的debugPrintf ()宏定義信息都會被替換成為printf()。

總結

宏是程序中由宏的值替換的一段代碼。宏由#define 指令定義。每當編譯器遇到宏名稱時,它就會用宏的定義替換名稱。宏定義不需要以分號;結束。

原文標題:#define的妙用

文章出處:【微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅


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

    關注

    1

    文章

    97

    瀏覽量

    24242
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68612
  • 編譯器
    +關注

    關注

    1

    文章

    1634

    瀏覽量

    49132

原文標題:#define的妙用

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言typedef與#define用法和區別

    在C語言編程中,typedef 和 #define是最常用語句,可能很多工作過幾年的工程師都沒有去深究過它們的一些用法和區別。
    發表于 10-12 10:39 ?682次閱讀

    C語言#define和typedef的區別

    在C語言編程中,typedef 和 #define是最常用語句,可能很多工作過幾年的工程師都沒有去深究過它們的一些用法和區別。
    發表于 11-03 10:29 ?677次閱讀

    #ifdef,#else,#endif,#if用法詳解(轉載)

    [size=11.818181991577148px]轉載------#ifdef,#else,#endif,#if用法詳解[size=11.818181991577148px]hxing( 樓主
    發表于 12-06 00:10

    typedef與define用法與區別

    typedef與define在一些用法上有一些相似之處,所以對于這方面接觸不多的朋友可能會有所混淆,下面分享一個圖,很清晰地對兩者的用法作了區分。
    發表于 08-10 13:50

    OrCAD中創建總線及用法詳解

    OrCAD中創建總線及用法詳解,如何創建總線,菜單place->bus或者右側快捷按鈕
    發表于 12-02 10:18 ?2.6w次閱讀

    C語言之詳解_ifdef等宏及妙用

    C語言之詳解_ifdef等宏及妙用的教程
    發表于 11-16 19:03 ?0次下載

    電阻的巧妙用法

    電阻的巧妙用法
    發表于 12-16 12:59 ?0次下載

    XMEGA PWM模塊多通道的用法詳解

    本文主要詳解XMEGA PWM模塊多通道的用法,具體的跟隨小編來了解一下。
    的頭像 發表于 06-18 14:09 ?4339次閱讀
    XMEGA PWM模塊多通道的<b class='flag-5'>用法</b><b class='flag-5'>詳解</b>

    C語言中#define的一些用法介紹概述

    今天整理了一些#define用法,與大家共享!1.簡單的define定義#define MAXTIME 1
    的頭像 發表于 04-14 11:29 ?7387次閱讀

    你會使用Linux 中的“!”驚嘆用法

    前言 實際上,不起眼的“!”在linux中有著很多讓你驚嘆的妙用。本文就來細數那些“!”的神奇用法。
    的頭像 發表于 01-29 09:08 ?2594次閱讀

    #define的高級用法簡介

    #define的高級用法
    的頭像 發表于 02-05 11:50 ?3931次閱讀

    CAN現場總線的妙用

    CAN現場總線的妙用說明。
    發表于 04-20 09:58 ?14次下載

    C語言中的typedef的用法

    在以前的學習中對于C語言中typedef和define的認識是,#define是宏,作用是簡單的替換,而typedef也是替換,只不過比define高級的是在替換的時候會進行語法檢查。但是后來
    發表于 01-13 13:36 ?0次下載
    C語言中的typedef的<b class='flag-5'>用法</b>

    CMake用法詳解

    CMake用法詳解
    發表于 10-25 16:28 ?2次下載

    SV中define宏定義的用法

    SV中使用預處理指令`define來定義宏,宏可以用來創建文本替換。根據場景不同,`define主要用來定義常量、簡化復雜的表達式或代碼段以及提高代碼的可移植性。其基本語法為:
    的頭像 發表于 10-21 14:22 ?583次閱讀
    主站蜘蛛池模板: 国产三级a三级三级野外| 国产精品视频你懂的| av2021天堂网手机版| 国产精品午夜久久久久久99热| 亚州视频一区二区| 日本wwwwwwwww| 亚洲精品私拍国产福利在线| 日本69sex护士xxx| 婷婷精品视频| 国产福利网站| 关晓彤被调教出奶水的视频| 在线观看成人网| 狠狠色丁香婷婷久久综合不卡| 免费看片免| 有码日韩| 国产成人精品日本亚洲直接| 五月综合色啪| 色老头影视| 午夜爱爱毛片xxxx视频免费看| 欲妇放荡叫床很浪的小说| 日本资源在线观看| 天天干视频在线| 九九精品免费观看在线| 久久久精品免费国产四虎| 美女被免费网站91色| 亚洲色图久久| 91大神大战丝袜美女在线观看| 国产成人啪午夜精品网站男同| 三级网站免费| 色片免费网站| 在线资源天堂| 999毛片| 亚洲国产一区二区三区在线观看| 日本黄色大片免费观看| 毛片观看网址| 特级毛片免费视频观看| 亚洲理论片在线观看| 中文字幕在线观看第一页| 成人欧美精品一区二区不卡| 亚洲视频一区在线| 狠狠色婷婷丁香综合久久韩国|