2017年10月5日 星期四

C++ 語法小技巧 - array[0]

在看SurfaceFlinger的時候看到了一個奇妙的 array[0] 參數

標準C/C++中不支援長度為0的array,
但GNU C允許這種宣告方式, 目的是為了access不定長度的結構體時,
可以節省空間與便利性.

範例, 宣告一個 demo struct如下:

struct demo_t {
    int     a;
    char    b[256];
    char    follow[0];
};

接著要在程式中使用這個 struct demo, 並在其後分配長度為LEN的char空間.

struct demo_t *demo = (struct demo_t *) malloc (sizeof(strcut demo_t) + LEN);

接著你就可以使用 demo->follow 來存取到這段空間.

另外一個作法是宣告為 char *follow, 但這樣在不定長度為 0 時則會多佔用一個 char 的 pointer.

當然要記得把這個變數放在結構體的最後面 >.0

沒有留言:

張貼留言

不定參數印 log

From the UNIXProcess_md.c #ifdef DEBUG_PROCESS   /* Debugging process code is difficult; where to write debug output? */ static void deb...