之前只有用到 C99 的 loop initial declarations (在 for 的初始化部份宣告變數), 看 Scott 提到才知道有其它好東西, 順便來掃一下 C99 的功能
stdbool.h
定義 bool、true、false, 實際上是將 bool 對應到 C99 定義 _Bool
stdint.h
定義了整數範圍、int16_t、int32_t、int64_t 等型別, 再也不用查 short/int/long 等在 32/64 bit OS 上的大小為多少。
designated initializers
可攜又易讀的初始化 (ref.)
// array int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; // struct struct point { int x, y; }; struct point p = { .y = yvalue, .x = xvalue };
像要用建表實作 isspace() 的話, 這樣寫超清楚的:
bool myisspace(int ch) { static bool whitespace[256] = { [' '] = true, ['\t'] = true, ['\f'] = true, ['\n'] = true, ['\r'] = true }; if (ch < 0 || ch >= 256) return false; return whitespace[ch]; }
其它
像 snprintf、inline、variable-length array (例如 int array[n]) 也很實用。
沒有留言:
張貼留言