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

Generate pb.c/pb.h files using protobuf-c without anonymous members in structs

我正在尝试使用 protobuf-c 生成一些 pb.c 和 pb.h 文件。我之前使用 nanopb 生成相同的文件,但需要移动到 protobuf-c 以进行新项目。

在为 OneOf 字段生成结构时,我发现生成的文件有所不同。

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

message MetricValue {
    oneof value {
        bool aBoolean = 1;
        string aString = 2;
        uint32 anInteger = 3;
        float aFloat = 4;
        double aDouble = 5;
    }
}

Nanopb 生成以下内容:

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 时生成以下内容:

struct  MetricValue
{
  ProtobufCMessage base;
  MetricValue__ValueCase value_case;
  union {
    protobuf_c_boolean aboolean;
    char *astring;
    uint32_t aninteger;
    float afloat;
    double adouble;
  };
};

我的项目配置方式,构建不成功,出现以下错误: “结构中的匿名成员是 C (AnonymousMember) 的扩展”。我知道我可以用一些编译标志来抑制它,但是其余代码的编写方式,使用匿名联合会导致我的代码发生重大变化。

有没有办法强制 protobuf-c 不生成匿名成员?

查看c_message.cc中的protobuf-c源码,union {}的生成是无条件的,没有命名选项