c/c++语言开发共享C ++和C中的联合初始化

我已经在定义为的头文件中构建了一个使用常量的工作C库

typedef struct Y { union { struct bit_field bits; uint8_t raw[4]; } X; } CardInfo; static const CardInfo Y_CONSTANT = { .raw = {0, 0, 0, 0 } }; 

我知道.raw初始化程序只是C语法。

如何在其中使用联合定义常量,以便我可以在C和C ++中使用它们。

    我有同样的问题。 对于C89,以下情况属实:

    使用C89样式的初始化程序,必须按声明的顺序初始化结构成员,并且只能初始化union的第一个成员

    我在下面找到了这样的解释: 结构和联合的初始化

    我相信C ++ 11允许你编写自己的构造函数,如下所示:

     union Foo { X x; uint8_t raw[sizeof(X)]; Foo() : raw{} { } }; 

    这个默认值 – 初始化Foo类型的联合与活动成员raw ,它具有零初始化的所有元素。 (在C ++ 11之前,没有办法初始化不是完整对象的数组。)

    我决定选择以下路径。

    而是声明全局变量:

     extern "C" { extern const struct Foobar foobar; } 

    并在全局部分初始化它:

     struct Foobar foobar = { 0, 0, 0, 0 }; 

    而不是用现代的ANSI C99语法来窃听C ++编译器我让链接器完成工作是解码C符号。

    C89允许通过直接列出要初始化的元素来初始化联合(就像您在代码中所拥有的那样)。 C99改变了这一点,这样你就可以通过它的第一个元素来启动联合。

    C ++只允许这种forms的初始化 – 由第一个元素组成。 所以这是适用于任何一种情况的代码:

     static const CardInfo Y_CONSTANT = {{0, 0, 0, 0 } }; 

      以上就是c/c++开发分享C ++和C中的联合初始化相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562741.html

      (0)
      上一篇 2021年2月5日
      下一篇 2021年2月5日

      精彩推荐