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