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

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

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

【C語(yǔ)言進(jìn)階】如何靈活利用宏定義做字符串轉(zhuǎn)換

嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 來(lái)源:嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 2022-08-29 08:51 ? 次閱讀

今天在恰好在項(xiàng)目開(kāi)發(fā)的過(guò)程中,遇到了一個(gè)有關(guān)宏定義的問(wèn)題。

項(xiàng)目運(yùn)用的背景如下:

項(xiàng)目中有個(gè)頭文件中定義了一個(gè)宏定義,比如是 #define CFG_LOGGER_NAME uart

然后,在某個(gè)C文件中需要講這個(gè)3轉(zhuǎn)換成對(duì)應(yīng)的字符串類型,即為"uart";很明顯,如果按以下的幾種方式定義,肯定得不到期望的結(jié)果:

方式1: #defineCFG_LOGGER_NAME_STR "CFG_LOGGER_NAME"

方式2: #defineCFG_LOGGER_NAME_STR #CFG_LOGGER_NAME

方式3: #defineCFG_LOGGER_NAME_STR ##CFG_LOGGER_NAME

為了解決這個(gè)問(wèn)題,特意再次去查看了有關(guān)C語(yǔ)言宏定義的語(yǔ)法,終于找到了解決方法,具體的思路是,需要用一個(gè)“中間宏函數(shù)”做轉(zhuǎn)換:

#define CFG_LOGGER_NAME uart

#define TO_STRING(x) #x

#define _CFG_LOGGER_NAME_STR(x) TO_STRING(x)

#defineCFG_LOGGER_NAME_STR _CFG_LOGGER_NAME_STR(CFG_LOGGER_NAME)

就這樣,經(jīng)過(guò)上面的宏定義處理后,訪問(wèn)CFG_LOGGER_NAME_STR的值,取到的就是期望值"uart".

雖然方法很簡(jiǎn)單,但是里面卻包含了宏定義最基礎(chǔ)的語(yǔ)法知識(shí),有機(jī)會(huì)可以再多多補(bǔ)充下宏定義相關(guān)的知識(shí)。

——————————————————————————————————————

附錄,demo測(cè)試如下:

demo1demo2


審核編輯:湯梓紅

?

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

    關(guān)注

    180

    文章

    7608

    瀏覽量

    137110
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    584

    瀏覽量

    20552
  • 宏定義
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    9036
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C++字符串string

    string是C++編程語(yǔ)言中的字符串。在C++中字符串處理可以使用c
    的頭像 發(fā)表于 07-10 00:26 ?1309次閱讀
    <b class='flag-5'>C</b>++<b class='flag-5'>字符串</b>string

    C語(yǔ)言定義的使用技巧

    #define命令是C語(yǔ)言中的一個(gè)定義命令,它用來(lái)將一個(gè)標(biāo)識(shí)符定義為一個(gè)字符串,該標(biāo)識(shí)符被稱為
    發(fā)表于 09-05 10:12 ?1235次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>中<b class='flag-5'>宏</b><b class='flag-5'>定義</b>的使用技巧

    C語(yǔ)言教程之字符串替換

    C語(yǔ)言教程之字符串替換,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-25 15:49 ?0次下載

    C語(yǔ)言教程之回文字符串

    C語(yǔ)言教程之回文字符串,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-25 15:49 ?0次下載

    C語(yǔ)言字符串轉(zhuǎn)數(shù)字實(shí)現(xiàn)方法

    C/C++語(yǔ)言中沒(méi)有專門(mén)的字符串變量,通常用字符數(shù)組來(lái)存放字符串
    發(fā)表于 11-14 17:50 ?1.3w次閱讀

    C語(yǔ)言字符串匹配和數(shù)據(jù)提取源碼

    C語(yǔ)言字符串匹配與數(shù)據(jù)提取源碼
    的頭像 發(fā)表于 02-27 15:42 ?2418次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>字符串</b>匹配和數(shù)據(jù)提取源碼

    C++之字符串類學(xué)習(xí)的總結(jié)

    一般我們?cè)?b class='flag-5'>c語(yǔ)言要實(shí)現(xiàn)對(duì)字符串操作的話,一般是采用字符數(shù)組或者一組函數(shù)來(lái)實(shí)現(xiàn)的,為啥這樣呢,那是因?yàn)?b class='flag-5'>c
    的頭像 發(fā)表于 12-24 16:24 ?767次閱讀

    C語(yǔ)言編程字符串函數(shù)匯總資源下載

    C語(yǔ)言編程字符串函數(shù)匯總資源下載
    發(fā)表于 04-15 16:18 ?9次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>編程<b class='flag-5'>字符串</b>函數(shù)匯總資源下載

    C語(yǔ)言總結(jié)_字符串全方位練習(xí)

    C語(yǔ)言字符串全方位練習(xí),涉及知識(shí)點(diǎn):字符串解析、大小寫(xiě)判斷、字符串插入、字符串刪除、
    的頭像 發(fā)表于 08-14 09:41 ?1516次閱讀

    C語(yǔ)言-字符串處理

    字符串C語(yǔ)言里使用非常多,因?yàn)楹芏鄶?shù)據(jù)處理都是文本,也就是字符串,特別是設(shè)備交互、web網(wǎng)頁(yè)交互返回的幾乎都是文本數(shù)據(jù)。 這篇文章就介紹字符串
    的頭像 發(fā)表于 08-14 10:05 ?1767次閱讀

    C語(yǔ)言中的定義

    #define命令是C語(yǔ)言中的一個(gè)定義命令,它用來(lái)將一個(gè)標(biāo)識(shí)符定義為一個(gè)字符串,該標(biāo)識(shí)符被稱為
    的頭像 發(fā)表于 09-28 16:05 ?3470次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>中的<b class='flag-5'>宏</b><b class='flag-5'>定義</b>

    C語(yǔ)言字符串的引用方式

    C語(yǔ)言程序中,字符串是存放在字符數(shù)組中的。 2. 用字符數(shù)組存放一個(gè)字符串,可以通過(guò)數(shù)組名和
    的頭像 發(fā)表于 03-10 14:57 ?1964次閱讀

    C語(yǔ)言定義字符串的幾種方法

    C語(yǔ)言定義字符串有哪些方法?
    的頭像 發(fā)表于 03-31 09:41 ?3584次閱讀

    c語(yǔ)言字符串定義

    字符串定義、初始化、操作和常見(jiàn)問(wèn)題。 字符串定義和初始化 在C語(yǔ)言中,
    的頭像 發(fā)表于 11-24 10:02 ?2027次閱讀

    C語(yǔ)言字符串編譯函數(shù)介紹

    C語(yǔ)言中,字符串實(shí)際上是使用null字符O'終止的一維字符數(shù)組。因此,一個(gè)以null結(jié)尾的
    的頭像 發(fā)表于 03-07 16:18 ?523次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>字符串</b>編譯函數(shù)介紹