c - 具有 N 个字段的类型 A 是否可以将其合并到具有 N+x 个字段的类型 B 的新对象中?

标签 c struct

假设我们有一个实例

struct Message {
    char * topic;
    int topicLength;

    void * data;
    int dataLength;
};

我们想将它重新创建为其他类型的对象

struct CoreMessage {
    int messaageId;

    char * topic;
    int topicLength;

    void * data;
    int dataLength;

    char * senderId;
    int senderIdLength;
};

我们可以安全地将 Message A 转换为 CoreMessage B 吗? C 中的东西没有复制内容,类型部分重叠,如此处所示?

最佳答案

你可以用匿名结构/union 来伪造它。无可否认,自 C11 以来,匿名结构才被标准化,但许多流行的编译器长期以来一直支持它们作为扩展。

这就是这些,公认的不太漂亮的东西:

struct Message  {
    char * topic;
    int topicLength;
    void * data;
    int dataLength;
    char * senderId;
    int senderIdLength;
};

struct CoreMessage {
    int messageId;
    union {
        struct Message;
        struct Message message;
    };
};

关于c - 具有 N 个字段的类型 A 是否可以将其合并到具有 N+x 个字段的类型 B 的新对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29653563/

相关文章:

c++ - 找到 2 个 vector 之间的 vector (2D)

c - 如何在 C 中检查两个设备文件是否相等?

c - 只打印跳过数字3,休息就好

c - OpenCL 内核中存在问题的 while 循环 : Execution hangs

c - 优化数组转置功能

c - 操作指向指针数组的指针

声明结构时的 C++ 问题

c - 强制 C 中的特定结构大小

c++ - 是否可以在结构构造中将自身地址推送到 vector ?

c# - 结构 - 现实生活中的例子?