Return 类型为 [] 的无界 C 数组

Return unbounded C array as type[]

在我的库的 C API 中,我有一些带有这样签名的函数集

size_t get_data(unsigned char* buffer, size_t buffer_len);
// or
size_t get_float_data(float* buffer, size_t buffer_len);

这个函数 return 内部数组中元素的数量(所以你可以将 NULL 传递给缓冲区并获得真正的数组长度)并且 buffer 是目标缓冲区,而 buffer_len 是数字buffer.

中的可用元素

典型用法是:

size_t data_size = get_data(NULL, 0);
unsigned char* data = (unsigned char*)malloc(data_size);
get_data(data, data_size);
//or
size_t float_data_size = get_float_data(NULL, 0);
float* float_data = (float*)malloc(float_data_size * sizeof(float));
get_float_data(float_data, float_data_size);

我想将此函数包装在 SWIG 中以供下一个签名

byte[] get_data();
float[] get_float_data();

对于 java 和 c#。

如果输入无界 C 数组,我发现了很多示例,但找不到任何输出。 而且我不明白如何在不具体化函数名称的情况下使用类型映射更改目标函数的签名。

I found a lot of examples if unbounded C array is input, but can't find anything for output.

这是有原因的:你不能这样做在 c(和 c++)中是非法的

char f() [] { // the actual syntax
    //whatever you want to do with it
}

但由于数组(未绑定或未绑定)也是一个指针,因此您可以这样做

char * f() {
    //whatever you want to do like before
}

如果你还想 return 它的大小,最好的方法就是制作一个包含大小和指针的 struct

所有以数组为输入的函数实际上都使用指向数组的指针。