C 预处理器名称定义

问题描述 投票:0回答:1

我想在我的库项目中使用预处理器创建某种智能名称定义。例如,我有一个名为 TC0 的计时器和一些中断处理程序的附加名称,如 TC0_Handler 和 TC0_IRQn。如果能够仅定义一个计时器名称(也可以是 TC1、TC2 等)并像这样使用它,那就太好了:

#define MY_TIMER          TC0
#define MY_TIMER_HANDLER  MY_TIMER ## _Handler
#define MY_TIMER_IRQ      MY_TIMER ## _IRQn

但问题在于,定时器ic实际上不是一个简单的名称,而是在特定于平台的标头中定义的宏:

#define TC0               ((Tc       *)0x42003000UL)

所以它是由预处理器处理的,并且不允许按照我想要的方式使用它。

这个问题有什么解决办法吗?

c c-preprocessor
1个回答
0
投票

'##' 不会将其操作数扩展为其实际值。 尝试使用 -E 选项编译下面的代码:

#define VAR ((int*)0xffff)
#define VAR_HANDLER VAR ## _handler

int VAR_HANDLER = VAR; // just to see the result

int
main (void)
{
  ;
}

输出为:

int VAR_handler = ((int*)0xffff);

int
main (void)
{
  ;
}
© www.soinside.com 2019 - 2024. All rights reserved.