迭代并比较具有不同大小的结构元素

Itering and compare struct element with different size

我有一个棘手的问题,我不知道是否有任何解决方案。

基本上我已经使用 x-macros 填充了一个结构,例如使用以下宏:

#define X_MACRO_TABLE(_) \
_(var_1 , type1)\
_(var_2, type2)\
_(...., ....)\
_(var_n, type_n)\

我可以得到这样的输出:

    typedef struct __attribute__((packed, aligned(1)))
    {
        union {
            struct __attribute__((packed, aligned(1))) data{
                type_1 var_1;
                type_2 var_2;
                ....
                type_n var_n;
            }data_s;
            uint8 DataArray[sizeof(struct data)];
        };
    }data_t;

这是我经常做的事情,而且效果很好。

现在假设我需要定义两个结构:

static data_t   DataVar;
static data_t   DataVar_max;

有什么方法可以使用循环或其他方法将结构的每个元素与其最大值进行比较?

DataVar.var_1 > DataVar_max.var_1 ??
DataVar.var_2 > DataVar_max.var_2 ??

或者通过数组,因为我知道类型维度,例如如果 var_1 等于 uint16_t 做类似的事情:

(DataVar.DataArray[0]+DataVar.DataArray[1]<<8) > (DataVar_max.DataArray[0]+DataVar_max.DataArray[1]<<8) ??

假设可以使用 > 运算符比较类型并且两个结构都已初始化,您可以简单地执行以下操作:

#define COMP_MEMBERS(name, type) if (DataVar.name > DataVar_max.name) { do_something(); }
...
X_MACRO_TABLE(COMP_MEMBERS)

这将扩展为每个成员一个 if 语句。