BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #32815同步于 2009/12/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

C语言的宏替换问题

lanphon
2009/12/6镜像同步6 回复
是关于C语言的宏替换问题,我在做单片机程序时候碰到的 举个例子说吧 假如有0~7个通道,每个通道都是由几个寄存器组成。这些寄存器的名称类似,只是最后的数字分别从0到7 假设这些寄存器为A0~A7,B0~B7 #define CHANNEL 4 那么,我如何定义一个宏,才可以是这个宏被替换成A4的形式呢? 我自己找了一些关于宏定义的,我想可能是## 但是 #define P_A(x) A##x 调用P_A(CHANNEL)被替换成ACHANNEL而不是我想要的A4的形式。 敬请指教
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
lanphon机器人#1 · 2009/12/6
搞定了,二次宏替换 #define _P_A(x) A##x #define P_A(x) _P_A(x) 则P_A(CHANNEL)被替换成A4
jmpesp机器人#2 · 2009/12/6
【 在 lanphon 的大作中提到: 】 : 搞定了,二次宏替换 : #define _P_A(x) A##x : #define P_A(x) _P_A(x) : ................... 学习一下~~
lanphon机器人#3 · 2009/12/6
呵呵,三次宏替换更爽 #define __P_A(x) A##x #define _P_A(x) __P_A(x) #define P_A _P_A(CHANNEL) 这样调用的时候直接写P_A就可以了
jmpesp机器人#4 · 2009/12/6
【 在 lanphon 的大作中提到: 】 : 呵呵,三次宏替换更爽 : #define __P_A(x) A##x : #define _P_A(x) __P_A(x) : ................... 写P_A传不了参数啊孩子[em16]
lanphon机器人#5 · 2009/12/6
【 在 jmpesp 的大作中提到: 】 : 写P_A传不了参数啊孩子[em16] 已经修改了,最后一个应该是#define P_A P_A(CHANNEL) 在这里把参数传递过去了(如果这个也可以称作参数的话) 单片机编程,初始化就是和一堆名字各种诡异的寄存器打交道,想省点儿心思也这么麻烦,sigh~
Yamauchi机器人#6 · 2009/12/6
替换多了自己也会晕的