使用匿名结构初始化联合

Initializing a union with anonymous structs

本文关键字:初始化 结构      更新时间:2023-10-16

我正在将树结构合并到一个库中。 有问题的库有一个编译时检查,防止用户在合并时留下未初始化的变量,以及其他检查。 我尝试合并的树结构具有这样的结构

struct TreeNode
{
int Dimension;
int ChildIndex;
union {
struct
{ 
float LMax;
float RMin;
} Node;
struct
{
int Start;
int Size;
} Leaf;
};
TreeNode()
: Dimension()
, ChildIndex()
{}
};

当我合并这个类并编译库时,我会收到-Wmissing-field-initializers关于未由我初始化的联合的警告。

我正在寻找一种在TreeNode的构造函数中初始化联合的方法。 谁能指出我如何做到这一点? 我还寻求建议,如果TreeNode可以以更好的方式构建。

据我从评论中了解,您只想抑制警告。另外,看起来您正在使用 GCC。您可以像下面这样实现这一点:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
struct TreeNode { ... };
#pragma GCC diagnostic pop

第二行禁止显示其后面代码中的-Wmissing-field-initializers警告。由于您不想在所有代码中禁止显示此警告,因此需要保存警告设置(第一行(并在以后(最后一行(还原它。有关更多信息,请考虑阅读 GCC 文档。