c - 如何在结构体中包含宏

标签 c struct macros

我正在尝试找到一种方法来动态访问 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/

相关文章:

c - 带符号的位字段表示

c++ - 为什么编译器在 C/C++ 中填充结构?

macros - Julia - n 嵌套循环

c - 该函数执行什么操作?

c - 如何找到算术表达式中的第一个运算符?

json - golang 嵌套结构和映射

c - 无法正确启动 int 并从函数中保留数字

c# - C# 中的 GET_WHEEL_DELTA_WPARAM 宏

c - 是否应该使用宏而不是灵活的数组成员?

在 C 中仅使用 int 创建数字 0