现在系统中有宏
#define LPC_UART0 xxx
#define LPC_UART1 yyy 每种类型不同
#define LPC_UART2 xxx
....
我要写一些初始化的函数,就要写
if (port==0) LPC_UART0=xxx 初始化设置不止一条
if (port==1) LPC_UART1=xxx
…
我要设置端口多,就要写一摸一样的代码很多,每种只是 LPC_UART(n)中的 n 不同。
有没有什么办法定义一个宏或者函数之类的,
能让我支持 UART(n) 这种形式,
或者 UART[n] 这种形式,
只要替换一下 n,样板代码只用写一遍。
我试过把所有 LPC_UART 都放到数组里,可是每种类型不同,没成功。
自己试着写过这种形式的宏,也不正确。
#define UART(n) LPC_UART(n)
各位大佬,有没有好的方法指点一下。
#define LPC_UART0 xxx
#define LPC_UART1 yyy 每种类型不同
#define LPC_UART2 xxx
....
我要写一些初始化的函数,就要写
if (port==0) LPC_UART0=xxx 初始化设置不止一条
if (port==1) LPC_UART1=xxx
…
我要设置端口多,就要写一摸一样的代码很多,每种只是 LPC_UART(n)中的 n 不同。
有没有什么办法定义一个宏或者函数之类的,
能让我支持 UART(n) 这种形式,
或者 UART[n] 这种形式,
只要替换一下 n,样板代码只用写一遍。
我试过把所有 LPC_UART 都放到数组里,可是每种类型不同,没成功。
自己试着写过这种形式的宏,也不正确。
#define UART(n) LPC_UART(n)
各位大佬,有没有好的方法指点一下。
8 条回复 • 2018-07-08 12:05:34 +08:00
|
1
wevsty 2018 年 7 月 5 日
#define UART(N) LPC_UART##N
这样就行了。 你使用 UART(1)的时候编译器会自动帮你替换成 LPC_UART1。 |
|
2
CannotGoogle 2018 年 7 月 5 日
宏的作用只能到在预处理阶段,可能数组会比较方便:
static lpc_uart[] = {LPC_UART0, LPC_UART1, LPC_UART2, ...}; lpc_uart[port] = xxx; |
|
3
CannotGoogle 2018 年 7 月 5 日
写错,static 后面忘加类型了。
|
|
4
eltonto187 OP @CannotGoogle 文中有提到,每个 LPC_UART 的类型不同,数组已试过,无效
|
|
5
eltonto187 OP @wevsty 回去试下,如果好好使,就太感谢了
|
|
6
changnet 2018 年 7 月 5 日 via Android
一定要用宏的话,wevsty 正解。但是这样逻辑不应该是用数组来解决的么,即使类型不一样,换种思路,用 union 什么的也可以处理。你用宏相当于硬编码。
如果是老代码定的规则,当我没说 |
|
7
duzhe0 2018 年 7 月 5 日
C 的宏是没有循环的
|