C 结构标记别名

C 结构标记别名,c,struct,C,Struct,有没有办法给结构标记加上别名?与中一样,我有一个struct foo,并希望将其别名为struct bar。我尝试了typedef-struct-foo-struct-bar,typedef-struct-foo-bar,等等。。。但是它当然不起作用,因为foo和bar不是类型名称,而是标记 有没有一种方法可以在不为我的结构定义实际类型名的情况下做到这一点(我想将它们保留为标记,因为我倾向于在它们前面加上struct——请不要为此进行宗教斗争) 我猜标签必须是唯一的,因此不可能直接找到,但奇怪的

有没有办法给结构标记加上别名?与中一样,我有一个
struct foo
,并希望将其别名为
struct bar
。我尝试了
typedef-struct-foo-struct-bar
typedef-struct-foo-bar
,等等。。。但是它当然不起作用,因为
foo
bar
不是类型名称,而是标记

有没有一种方法可以在不为我的结构定义实际类型名的情况下做到这一点(我想将它们保留为标记,因为我倾向于在它们前面加上
struct
——请不要为此进行宗教斗争)

我猜标签必须是唯一的,因此不可能直接找到,但奇怪的是,我在网上找不到一个参考(毫不奇怪,我找到的只是关于typedef struct的含义以及何时/为什么使用它的讨论,这也不是我想要的)。

你可以使用
#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{
INTA;
};
#定义bar-foo
int main(){
结构条x;
x、 a=10;
printf(“%d”,x.a”);
putchar(10);
返回0;
}

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

您不能将一个结构转换成另一个结构,但可以使用
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;

代码可以是
foo
bar
,但不能是
struct foo

啊,我没有想到要定义实际的struct标记,我怎么也没想到。我认为与恰好与标记具有相同标识符的标识符冲突不应该是问题,标记都是大写的,可能永远不会与任何内容冲突。但我会查一查的。欢迎其他建议@托马斯:我想没有别的办法了。其他的建议不会出现:当你阅读一个程序时,看到structfoo,但它实际上意味着structbar,这会让你感到困惑。使代码更难阅读IMHO。作为附加信息,这两个类型定义可以组合在一起,如
typedef struct foo foo,bar。最重要的是,这三者可以组合在一起,如
typedef struct foo{}foo,bar。最后,据我所知,空结构并不是规范的一部分,它只是一个例子。