别名结构成员

时间:2017-02-18 13:53:07

标签: c struct c-preprocessor alias

我有一个可能有2个或4个成员的结构,具体取决于预处理器定义。

struct foo {
    int m1;
    int m2;
    #ifdef MORE_MEMBERS
    int m3;
    int m4;
    #endif
}

我有以foo.m3foo.m4为参数的函数。因此,当MORE_MEMBERS未定义时,我收到编译错误。

我试图避免在每个函数调用时添加#ifdef。如果m3未定义,是否有某种方法可以使m4MORE_MEMBERS成为别名/假人?我仍然希望结构大小等于sizeof(int) * 2

1 个答案:

答案 0 :(得分:0)

我同意Iharob,这是可怕的代码。你所追求的并不是很清楚,但听起来你可以使用union

struct foo
{
    int a;
    int b;
};

union bar
{
    struct foo m1m2;
    struct foo m3m4;
};

void f(union bar *x)
{
    printf("%d", x->m1m2.a);
    printf("%d", x->m3m4.b);
}