今天在恰好在项目开发的过程中,遇到了一个有关宏定义的问题。
项目运用的背景如下:
项目中有个头文件中定义了一个宏定义,比如是 #define CFG_LOGGER_NAME uart
然后,在某个C文件中需要讲这个3转换成对应的字符串类型,即为”uart”;很明显,如果按以下的几种方式定义,肯定得不到期望的结果:
方式1: #defineCFG_LOGGER_NAME_STR “CFG_LOGGER_NAME”
方式2: #defineCFG_LOGGER_NAME_STR #CFG_LOGGER_NAME
方式3: #defineCFG_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)
#defineCFG_LOGGER_NAME_STR _CFG_LOGGER_NAME_STR(CFG_LOGGER_NAME)
就这样,经过上面的宏定义处理后,访问CFG_LOGGER_NAME_STR的值,取到的就是期望值”uart”.
虽然方法很简单,但是里面却包含了宏定义最基础的语法知识,有机会可以再多多补充下宏定义相关的知识。
——————————————————————————————————————
附录,demo测试如下:
审核编辑:汤梓红
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:【C语言进阶】如何灵活利用宏定义做字符串转换-c语言中,宏替换没有数据类型限制 https://www.yhzz.com.cn/a/8040.html