2010-11-20 234 views
0

GCC 4.5.1的C89初始化结构

具有以下标志编译:-Wall, -Wextra

我有以下的结构,我试图用默认值初始化。不过,我得到以下警告:

static struct Device { 
    char *name; 
    char *config; 
} *app = { NULL, NULL }; 

警告:

warning: initialization from incompatible pointer type 
warning: excess elements in scalar initializer 

但是,如果我通过声明非指针做到以下几点,我没有得到任何的问题,即

static struct Device { 
     char *name; 
     char *config; 
    } app = { NULL, NULL }; 

这是为什么?

非常感谢任何建议,

回答

2

不能初始化指针的方式。您可以这样做:

static struct Device { 
    char *name; 
    char *config; 
} *app = NULL; 

将指针初始化为NULL。指针不过是一个内存地址。您不能将{ NULL, NULL }指定为内存地址。

2

指针不是一个结构,而是一个简单的类型,其值是一个地址。

  • 如果您app变量是指针类型,可以用NULL初始化但不与括号语法使用
  • 如果app变量是struct Device型的,可以使用支具初始化提供一个初始NULL价值的nameconfig领域
2

因为*应用程序是因此它初始化为{NULL,NULL}是错误的指针,你应该初始化它只是NULL。

在应用程序的情况下,你有一个结构的实际变量实例,所以你在这里初始化结构的成员为NULL,这是好的。