使用 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 {}
的生成是无条件的,没有命名选项
我正在尝试使用 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 {}
的生成是无条件的,没有命名选项