On Thursday, 20 July 2017 at 21:17:45 UTC, Walter Bright wrote:
Some time ago, I wrote about the X Macro in C:
https://digitalmars.com/articles/b51.html
I used it from time to time in C code. It's one of the things I
actually like about the C preprocessor. But in translating the
aged C code to D it was time to make X work in D. Here's the C
code, followed by the D translation.
In C there's no point in the X macro anymore since C99.
Designated initializer allow to do it properly[1] now.
enum COLORS { red, blue, green, max };
char *cstring[max] = {[red]="red", [blue]="blue",
[green]="green" }; /* C99 */
It works also with array indexes[2].
int a[3] = { [2]=1, [0]=3, [1]=2 }; /* C99 designated
initializer */
int a[3] = { [2]=1, [0]=3, 2 }; /* C99 designated
initializer */
C++ hasn't yet integrated.
[1]: https://dlang.org/ctod.html#arrayenum
[2]: https://dlang.org/ctod.html#arrayinit2