我正在阅读一些c代码并发现某些结构包含没有变量名的联合名称,如下例所示:
typedef union Lock Lock;
union Lock{
uint32 key;
};
struct Test{
Lock;
uint32 name1;
};
Lock inside Test是什么意思? PS。在两个声明之前已经定义了类型uint32。
答案 0 :(得分:0)
您发布的内容无效C.就语言而言,Lock
和union Lock
完全不同,就是这样。
但是如果你在结构中说union Lock
它会编译但不会做任何事情:它只是一个多余的声明,什么都不宣告。
有人猜测在结构的开头添加union Lock
或Lock
会有所作为。快速检查应该证明是错误的:
printf("%zu\n", offsetof(struct Test, name1)); /* Will print 0. */
答案 1 :(得分:0)
如果您可以编译代码,我猜您使用的是旧编译器或仍支持隐式int 的编译器。这意味着编译器会将您的代码解释为
struct Test{
int Lock;
uint32 name1;
}
另请参阅Why does/did C allow implicit function and typeless variable declarations?
答案 2 :(得分:0)
因此,添加了typedef后,gcc会发出警告:
main.c:8:9: warning: declaration does not declare anything [enabled by default]
此外,简单的sizeof
表明它们具有相同的大小:
struct Test{
Lock;
uint32 name1;
};
struct Test2{
uint32 name1;
};
我不认为在C中有任何情况,这可能意味着任何有用的东西。也许这是forward declaration的混乱尝试。