今天在看Android Init部分代码的时候看到了如下数组初始化方法:
#define KEYWORD(symbol, flags, nargs, func) \ [ K_##symbol ] = { #symbol, func, nargs + 1, flags, }, struct { const char *name; int (*func)(int nargs, char **args); unsigned char nargs; unsigned char flags; } keyword_info[KEYWORD_COUNT] = { [ K_UNKNOWN ] = { "unknown", 0, 0, 0 }, #include "keywords.h" };
第一次看到的时候觉得很奇怪,数组的初始化竟然可以按照指定下标进行初始化。对此很疑惑,经过一番查找,找到了答案。GCC是支持这样的扩展的。而这样的扩展是GUN C++是不支持的。具体详情可以参考下面的链接,讲的十分清楚。
http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html