首页 > 技术文章 > Designated Inits

zhx831 2014-01-21 10:47 原文

今天在看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

推荐阅读