首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在结构中使用没有匿名成员的protobuf-c生成pb.c/pb.h文件

在结构中使用没有匿名成员的protobuf-c生成pb.c/pb.h文件
EN

Stack Overflow用户
提问于 2022-05-20 06:20:13
回答 1查看 73关注 0票数 0

我正在尝试使用protobuf-c生成一些pb.c和pb.h文件。我之前使用纳米粒子来生成相同的文件,但是需要移动到protobuf为一个新的项目。

在为OneOf字段生成结构时,我看到了生成的文件的不同之处。

对于proto文件中的以下定义:

代码语言:javascript
复制
message MetricValue {
    oneof value {
        bool aBoolean = 1;
        string aString = 2;
        uint32 anInteger = 3;
        float aFloat = 4;
        double aDouble = 5;
    }
}

Nanopb生成以下内容:

代码语言:javascript
复制
typedef struct _MetricValue {
    pb_size_t which_value;
    union {
        bool aBoolean;
        char aString[32];
        uint32_t anInteger;
        float aFloat;
        double aDouble;
    } value;
/* @@protoc_insertion_point(struct:MetricValue) */
} MetricValue;

在使用protobuf-c时,会生成以下内容:

代码语言:javascript
复制
struct  MetricValue
{
  ProtobufCMessage base;
  MetricValue__ValueCase value_case;
  union {
    protobuf_c_boolean aboolean;
    char *astring;
    uint32_t aninteger;
    float afloat;
    double adouble;
  };
};

按照我的项目配置方式,构建失败,并出现以下错误:“struct中的匿名成员是C(AnonymousMember)的扩展”。我知道我可以使用一些编译标志来抑制这种情况,但是使用匿名联合来编写其余代码的方式会给我的代码带来很大的变化。

有什么方法可以让protobuf不生成匿名成员吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-20 06:26:59

查看message.cc中的protobuf-c源代码,union {}的生成是无条件的,并且没有命名它的选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72314366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档