我需要一种C语言中的方法,能够处理各种格式/类型的数据包.您推荐的方法是什么(请注意,我希望尽可能符合MISRA).目前,我正在考虑以下选项(但愿意学习其他选项),根据下面的代码oullize
选项1:方法显式声明数据包的格式(并且方法内部有切换用例) 选项2:数据包括数据类型和与内容的联合
您更喜欢这些选项中的哪一个?
非常感谢您的见解
int process_type1(const struct type1* data) {
/* do stuff with data */
}
int process_type2(const struct type2* data) {
/* do stuff with data */
}
/* Option 1: explicit data type in method to process data */
int process_1(const enum data_type data_type, const uint8_t* data, const size_t* n_bytes) {
int res = -1;
switch (data_type) {
case TYPE_1: res = process_type1((const struct type1*)data); break;
case TYPE_2: res = process_type2((const struct type2*)data); break;
default:
break;
}
return res;
}
/* Option 2: implicit data type in method to process data and union to include the data */
struct packet {
enum data_type {
TYPE_1,
TYPE_2,
/* Add more types as needed */
} data_type;
union {
struct type1 type1;
struct type2 type2;
/* Add more types as needed */
} data;
};
int process_2(const struct packet* packet) {
int res = -1;
switch (packet->data_type) {
case TYPE_1:
res = process_type1(&packet->data.type1);
break;
case TYPE_2:
res = process_type2(&packet->data.type2);
break;
default:
break;
}
return res;
}