欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

詳解#define的奇妙用法

STM32嵌入式開發(fā) ? 來源:CSDN技術(shù)社區(qū) ? 作者:CSDN技術(shù)社區(qū) ? 2022-03-22 09:03 ? 次閱讀

在 C/C++ 編程語言中,當(dāng)程序被編譯時(shí),被發(fā)送到編譯器,編譯器將程序轉(zhuǎn)換為機(jī)器語言,然后完成編譯并執(zhí)行該程序。預(yù)處理器也稱為宏預(yù)處理器。C /C++中的宏可以定義為一組程序語句,并在必須使用這些代碼集時(shí)使用該名稱。

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

#define 奇妙用法

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

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

#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

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

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

#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

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

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

#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

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

  • 多行宏

類似對象的宏可以有多行。因此,要?jiǎng)?chuàng)建多行宏,您必須使用反斜杠換行符。

#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

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

#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

  • 可變參數(shù)宏

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

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

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

簡單來說,...表示所有剩下的參數(shù),__VA_ARGS__被宏定義中的...參數(shù)所替換。這在c語言的GNU擴(kuò)展語法里是一個(gè)特殊規(guī)則:當(dāng)__VA_ARGS__為空時(shí),會(huì)消除前面這個(gè)逗號。

  • 條件編譯
#include#define debugPrintf /*定義一個(gè)宏開關(guān),屏蔽則關(guān)閉,不屏蔽則打開 */#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版本,則打開這個(gè)宏開關(guān)(不屏蔽#define debugPrintf ),此時(shí)所有的debugPrintf ()宏定義信息都會(huì)被替換成為printf()。

總結(jié)

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

原文標(biāo)題:#define的妙用

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


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

    關(guān)注

    1

    文章

    97

    瀏覽量

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

    關(guān)注

    30

    文章

    4841

    瀏覽量

    69143
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1642

    瀏覽量

    49318

原文標(biāo)題:#define的妙用

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

收藏 人收藏

    評論

    相關(guān)推薦

    C語言typedef與#define用法和區(qū)別

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

    C語言#define和typedef的區(qū)別

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

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

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

    typedef與define用法與區(qū)別

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

    OrCAD中創(chuàng)建總線及用法詳解

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

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

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

    電阻的巧妙用法

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

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

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

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

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

    你會(huì)使用Linux 中的“!”驚嘆用法

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

    #define的高級用法簡介

    #define的高級用法
    的頭像 發(fā)表于 02-05 11:50 ?4033次閱讀

    CAN現(xiàn)場總線的妙用

    CAN現(xiàn)場總線的妙用說明。
    發(fā)表于 04-20 09:58 ?14次下載

    C語言中的typedef的用法

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

    CMake用法詳解

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

    SV中define宏定義的用法

    SV中使用預(yù)處理指令`define來定義宏,宏可以用來創(chuàng)建文本替換。根據(jù)場景不同,`define主要用來定義常量、簡化復(fù)雜的表達(dá)式或代碼段以及提高代碼的可移植性。其基本語法為:
    的頭像 發(fā)表于 10-21 14:22 ?834次閱讀