2

我正在阅读一些c代码,发现某些结构包含一个没有变量名的联合名称,如下例所示:

typedef union Lock Lock;

union Lock{
    uint32 key;
};

struct Test{
    Lock;
    uint32 name1;
};

Lock inside 测试是什么意思?PS。类型 uint32 已经在两个声明之前定义。

4

3 回答 3

0

因此,添加 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 中存在任何情况,这可能意味着任何有用的东西。也许这是前向声明的混乱尝试。

于 2013-04-11T17:04:41.807 回答
0

您发布的内容不是有效的 C。就语言而言,Lock它们union Lock是完全不同的东西,仅此而已。

但是,如果您要union Lock在结构内部说它会编译但不会做任何事情:它只是一个多余的声明,什么都不声明。


有人猜测在结构的开头添加union Lockor会起到一些作用。Lock快速检查应该证明是错误的:

printf("%zu\n", offsetof(struct Test, name1)); /* Will print 0. */
于 2013-04-11T05:57:06.623 回答
0

如果您可以编译代码,我猜您使用的是旧编译器或仍支持隐式 int的编译器。这意味着编译器将您的代码解释为

struct Test{
    int Lock;
    uint32 name1;
}

另请参阅为什么/C 允许隐式函数和无类型变量声明?

于 2013-04-11T07:50:45.213 回答