【C语言进阶】如何灵活利用宏定义做字符串转换

描述

    今天在恰好在项目开发的过程中,遇到了一个有关宏定义的问题。

    项目运用的背景如下:

    项目中有个头文件中定义了一个宏定义,比如是 #define CFG_LOGGER_NAME  uart

    然后,在某个C文件中需要讲这个3转换成对应的字符串类型,即为"uart";很明显,如果按以下的几种方式定义,肯定得不到期望的结果:

方式1: #define CFG_LOGGER_NAME_STR  "CFG_LOGGER_NAME"

方式2: #define CFG_LOGGER_NAME_STR  #CFG_LOGGER_NAME

方式3: #define CFG_LOGGER_NAME_STR  ##CFG_LOGGER_NAME

    为了解决这个问题,特意再次去查看了有关C语言宏定义的语法,终于找到了解决方法,具体的思路是,需要用一个“中间宏函数”做转换:

#define CFG_LOGGER_NAME  uart

#define TO_STRING(x)  #x

#define _CFG_LOGGER_NAME_STR(x)  TO_STRING(x)

#define CFG_LOGGER_NAME_STR        _CFG_LOGGER_NAME_STR(CFG_LOGGER_NAME) 

    就这样,经过上面的宏定义处理后,访问CFG_LOGGER_NAME_STR的值,取到的就是期望值"uart".

    虽然方法很简单,但是里面却包含了宏定义最基础的语法知识,有机会可以再多多补充下宏定义相关的知识。

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

附录,demo测试如下:

宏定义宏定义

 


  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分