结构标记别名

时间:2014-06-14 11:33:59

标签: c struct

有没有办法为struct标签添加别名?如我所知,我有struct foo并希望将其别名为struct bar。我尝试了typedef struct foo struct bartypedef struct foo bar等等...但它当然不起作用,因为foobar不是类型名称而是标签。

有没有办法在不为我的结构定义实际类型名称的情况下执行此操作(我希望将它们保留为标记,因为我偏向于使用struct作为前缀 - 请不要对此进行宗教战争。

我的猜测是标签必须是唯一的,因此不可能直接但我好奇地无法在线找到参考(我发现所有的,不出所料,关于什么typedef结构意味着什么以及何时使用它的讨论,再一次不是我想要的。)

2 个答案:

答案 0 :(得分:1)

您可以使用#define bar foo来达到您想要的效果。不知道它对你来说是否足够好,但它可以正常工作,如下例所示:

#include <stdio.h>

struct foo {
    int a;
};

#define bar foo

int main( ) {

    struct bar x;

    x.a = 10;
    printf( "%d", x.a );

    putchar( 10 );
    return 0;
}

我可以告诉它有一个缺点,就是现在你可以定义一个标识符名为foo的整数,但尝试使用名称bar这样做会再次导致标识符名称为foo的变量,因为这就是#define的工作原理。

答案 1 :(得分:0)

您不能将typedef一个结构转换为另一个结构,但可以使用typedefs创建指向相同类型的sereval类型名称。

在类似情况下,通常要做的是使用相同结构的2 typedef

// the one and only struct definition
struct foo {
};

// define the new types which are equivalent to struct foo
typedef struct foo foo;
typedef struct foo bar;

代码可以foobar,但不能struct foo