我正在尝试找到一种方法来动态访问 C 中的某个宏。
我尝试将宏包含在结构中,但随后出现“初始化器元素不是常量”错误。基本上我只是想根据索引访问正确的宏,但我只是不知道如何。有没有直接的方法来实现这一点?请注意,代码并不完整,只是说明我想要做什么。
#define Data_CAN_SES_Enbl() (...)
#define Data_CAN_SAS_Enbl() (...)
#define Data_CAN_PEP_Enbl() (...)
struct CAN_Rx {
const uint8 id;
const uint8 bus;
xx
};
static struct CAN_Rx CheckRx[] = {
/* SES */
{
0,0,?
},
/* SAS */
{
1,0,?
},
/* PEP */
{
2,1,?
}
};
void run(uint8 index)
{
uint8 enabled = CheckRx[index].xx;
}
最佳答案
简单地说:你不会。 不要将宏视为代码:它们只是在编译代码之前由预处理器替换的文本 block 。 如果您需要在结构中嵌入代码,您最好查看函数指针。
--- 编辑 ---
顺便问一下,为什么要在代码中使用宏?看看它,似乎你可以用一个简单的函数做同样的事情,根据参数返回具有不同内容的结构,例如:
static struct CAN_Rx getCANrx(int index){
switch(index)
{
case '0':
struct CAN_rx res = /* initialize struct */;
return res;
case '1':
/* as previous */
default:
/* manage default result or errors */
}
}
关于c - 如何在结构体中包含宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57267123/