4 ms·
In this case, the C declaration doesn't match the other two. The variable x is a function that returns a pointer to an array of 5 pointers to functions returnin
by trealira 2y ago
In this case, the C declaration doesn't match the other two. The variable x is a function that returns a pointer to an array of 5 pointers to functions returning char. Indeed, that's what cdecl.org says:
declare x as function returning pointer to array 5 of pointer to function returning char
Using the notation you did, that would be:
var x: func() ^[5] ^func() char
There are only two arrows there now.
If you wanted a pointer to a function like this, you would need a third asterisk in the declaration:
char (*(*(*x)())[5])();
- Joker_vD 2y agoOh, good catch, thank you! But I remember an example with some other tricky C expression/type declarator where the number of actual dereferences differed from the amount of asterisks in the code. > Using the notation you did, that would be: Well, it'd be func x() ^[5] ^func() char; ... because it's a function declaration, after all, not a variable.
- trealira 2y ago> But I remember an example with some other tricky C expression/type declarator where the number of actual dereferences differed from the amount of asterisks in the code. Was it this code? void f(int *a) { void *p = &a; ***(int*(*)[])p = 1; } Reading your comment made me think of this. I tried to find the original post for this, but it seems it was deleted. I only found it again through this post: https://zig.news/sobeston/using-zig-and-translate-c-to-understand-weird-c-code-4f8 https://zig.news/sobeston/using-zig-and-translate-c-to-under...