【发布时间】:2019-07-28 13:10:07
【问题描述】:
我需要返回一个包含两个值的结构。一个双精度值 (time) 和一个可变大小的 uint8_t 数组。我有两个函数,它们都应该返回相同类型的结构,但具有不同的数据成员 (data[9], data[64])。
我已经尝试创建一个带有额外成员 size 的结构,但这根本不起作用。 size 应该用固定长度初始化数组,但是编译器说变量大小没有定义。
typedef struct Result {
double time;
int size;
uint8_t data[size];
}
前一个不起作用,所以我尝试创建一个空数组并在我的函数中对其进行初始化,但也不起作用。
typedef struct Result {
double time;
uint8_t data[];
} Result;
Result foo() {
double time = 17.5;
uint8_t data[9] = {0};
Result res = {sizeof(data), time, data};
return res;
}
Result bar() {
double time = 9.5;
uint8_t data[64] = {4};
Result res = {sizeof(data), time, data};
return res;
}
int main(void) {
Result foo = foo();
printf("%.6f\n", foo->time);
uint8_t data[9] = foo->data;
// work with data[9] ...
Result bar = bar();
printf("%.6f\n", bar->time);
uint8_t data[64] = bar->data;
// work with data[64] ...
}
我收到此错误消息:
Error: return type is an incomplete type
结构的成员应该可用,如主函数中所示。我认为编译器不知道 data 数组应该有多大,但也许有人可以解释一下这个上下文以及我关于如何返回一个包含可变大小数组的结构的问题。
如果有任何帮助,我将不胜感激,非常感谢。
【问题讨论】: