On Tuesday, 18 September 2018 at 02:39:39 UTC, Joe wrote:
On Sunday, 10 June 2018 at 17:59:12 UTC, Joe wrote:
That worked but now I have a more convoluted case: a C array of pointers to int pointers, e.g.,

int **xs[] = {x1, x2, 0};
int *x1[] = {x1a, 0};
int *x2[] = {x2a, x2b, 0};
...
int x2a[] = { 1, 3, 5, 0};

Only the first line is exposed (and without the initialization). So I tried:

extern(C) __gshared extern int**[1] xs;

After a long hiatus, I'm back to working on something related to the above, but now that various other C pieces have been converted to D I'm down to converting these static arrays to D. There are two arrays that are giving me trouble. The second type is like that shown above. The first is a simpler array of pointers to int, e.g.,

int *yp = {2, 4, 0};
int *yq = {10, 12, 0};

This is valid C in the sense that it compiles, but I doubt it does what you think it does. This is equivalent code:

int *yp = 2;
int *yq = 10;

int *ys[] = {yp, yq, 0};

This isn't even valid C code.

In D, I first declared these as

int[] yp = [2, 4];
int[] yq = [10, 12];
__gshared int*[] ys = [ &yp, &yq ];

D dynamic arrays are not equivalent to C arrays.


It's hard to see what you're trying to do with the code you posted. Have you tried instead to use a tool to translate the C headers?

Reply via email to