我正在尝试使用protobuf-c生成一些pb.c和pb.h文件。我之前使用纳米粒子来生成相同的文件,但是需要移动到protobuf为一个新的项目。
在为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;
};
};按照我的项目配置方式,构建失败,并出现以下错误:“struct中的匿名成员是C(AnonymousMember)的扩展”。我知道我可以使用一些编译标志来抑制这种情况,但是使用匿名联合来编写其余代码的方式会给我的代码带来很大的变化。
有什么方法可以让protobuf不生成匿名成员吗?
发布于 2022-05-20 06:26:59
查看message.cc中的protobuf-c源代码,union {}的生成是无条件的,并且没有命名它的选项。
https://stackoverflow.com/questions/72314366
复制相似问题