2011-07-08 21 views
2

我想知道用C90初始化这个结构的最佳方式是什么,同时仍然保持整洁。C90:我如何在没有C99扩展的情况下在C中全局初始化这个结构

在我的头文件,称它为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不支持):

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

这显然使它对你想要做的事情非常整洁透明。我怎么能初始化我的C文件中的全局结构,它也像这个语法一样干净?谢谢。

+0

你使用什么编译器? – osgx

+0

GCC,但我们想保留它C90,因为项目中的其他内容都是为了兼容C90而编写的。 – Jack

+0

在我们的项目中,我们甚至转移到gcc-only扩展(有些仅在gcc> = 4.5),因为使用其他编译器的可能性非常低。 – osgx

回答

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

可能是最干净的选项(缺少让自己成为C99编译器; GCC和Intel C都支持C99)。

+0

我可以发誓我多次尝试了这个,并得到了关于标量初始值设定项的大括号的编译器错误,但它现在似乎无论出于何种原因都能正常工作,请参阅图。感谢您确认这会起作用。 – Jack

相关问题