2010-11-20 127 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,這是好的。