C90: How do I globally initialize this struct in C without C99 extensions

c, c89, declare, global, struct

Solution

struct s_test_cfg test_cfg = {
    { "a", "b", "c" },  /* .a */
    { "d", "e", "f" },  /* .b */
    { "g", "h", "i" },  /* .c */
};

is probably the cleanest option (short of getting yourself a C99 compiler; GCC and Intel C both support C99).

Problem

I was wondering what the best way to initialize this struct is with C90, while still keeping it neat. In my header file, call it test.h, I have the following struct defined: ``` struct s_test_cfg{ char *a[3]; char *b[3]; char *c[3]; } ``` Then I have it declared as an extern struct so that I can initialize it globally in the .c file: ``` extern struct s_test_cfg test_cfg; ``` Now in my .c file, I want to be able to declare something like this globally (obviously what I'm about to write is unsupported in C90): ``` struct s_test_cfg test_cfg = { .a = {"a", "b", "c"},\ .b = {"d", "e", "f"},\ .c = {"g", "h", "i"} }; ``` This obviously makes it very neat and transparent as to what you're trying to do. How can I initialize the global struct in my C file that is also as clean as this syntax? Thanks.

Original source