C語言結構體的初始化

  今天在工做時,看到了奇葩的結構體初始化方式,因而我查了一下C99標準文檔和gcc的說明文檔,終於搞清楚是怎麼回事了。spa

  假設有以下結構體定義:code

typedef struct
{
    int a, b, c;
} MyStruct;

  那麼結構體的初始化方式以下有三種:blog

(1) C89的初始化方式文檔

MyStruct test = {1, 2, 3};

  這種初始化的優勢是語法簡單,無需輸入變量名;缺點是成員變量的初始化順序必須與聲明的一致,沒法亂序初始化。it

(2) C99新增的「指定初始化列表」(designated initializers)的初始化方式class

MyStruct test = {.b = 2, .a = 1, .c = 3};

  這種初始化的優勢是能夠亂序初始化;缺點是語法略微複雜,要打變量名。test

(3) gcc的初始化方式(GNU擴展,非標準)變量

MyStruct test = {a : 1, b : 2, c : 3};

  與上一種相同,優勢可亂序初始化;缺點語法略微複雜。另外還有一個缺點——非標準,可移植性差。gcc

相關文章
相關標籤/搜索