C90:在没有C99扩展的情况下,如何在C中全局初始化此结构

C90:在没有C99扩展的情况下,如何在C中全局初始化此结构,c,struct,global,declare,c89,C,Struct,Global,Declare,C89,我想知道用C90初始化这个结构最好的方法是什么,同时保持它整洁 在我的头文件中,将其称为test.h,定义了以下结构: struct s_test_cfg{ char *a[3]; char *b[3]; char *c[3]; } 然后将其声明为外部结构,以便在.c文件中全局初始化它: extern struct s_test_cfg test_cfg; 现在在我的.c文件中,我希望能够在全局范围内声明类似的内容(显然,我将要编写的内容在C90中不

我想知道用C90初始化这个结构最好的方法是什么,同时保持它整洁

在我的头文件中,将其称为test.h,定义了以下结构:

 struct s_test_cfg{
      char *a[3];
      char *b[3];
      char *c[3];
 }
然后将其声明为外部结构,以便在.c文件中全局初始化它:

 extern struct s_test_cfg test_cfg;
现在在我的.c文件中,我希望能够在全局范围内声明类似的内容(显然,我将要编写的内容在C90中不受支持):

很明显,这使得它非常整洁和透明,你想做什么。如何在C文件中初始化与此语法一样干净的全局结构?谢谢

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

可能是最干净的选择(除了给自己买一个C99编译器,GCC和Intel C都支持C99)。

我可以发誓我以前试过多次,但在标量初始值设定项周围出现了关于大括号的编译器错误,但不管出于什么原因,它现在似乎可以工作了,仔细想想。感谢您确认这将起作用。GCC但我们希望将其保留为C90,因为项目中的所有其他内容都是为了C90兼容性而编写的。在我们的项目中,我们甚至正在转向仅使用GCC的扩展(一些仅在GCC>=4.5中),因为使用另一个编译器的可能性很低。注意:在初始化中不需要`\`连续字符(除非它实际上是跨多行的宏的一部分)。
struct s_test_cfg test_cfg = {
    { "a", "b", "c" },  /* .a */
    { "d", "e", "f" },  /* .b */
    { "g", "h", "i" },  /* .c */
};