结构体变量在定义时赋值

http://bbs.chinaunix.net/thread-1264281-1-1.html

在看Wireless tools这个工具的源代码时,看到iwlib.c这个文件,发现了standard_ioctl_descr这个变量,它是iw_ioctl_description定义的数组,

iw_ioctl_description是这样定义的:

struct iw_ioctl_description
{
        __u8        header_type;       
        __u8        token_type;       
        __u16        token_size;               
        __u16        min_tokens;               
        __u16        max_tokens;               
        __u32        flags;                       
};

standard_ioctl_descr是这样定义的:
static const struct iw_ioctl_description standard_ioctl_descr[] = {
        [SIOCSIWCOMMIT        - SIOCIWFIRST] = {
                .header_type        = IW_HEADER_TYPE_NULL,
        },
        [SIOCGIWNAME        - SIOCIWFIRST] = {
                .header_type        = IW_HEADER_TYPE_CHAR,
                .flags                = IW_DESCR_FLAG_DUMP,
        },
        /*中间还有很多,我给省略了*/
        [SIOCSIWPMKSA - SIOCIWFIRST] = {
                .header_type        = IW_HEADER_TYPE_POINT,
                .token_size        = 1,
                .min_tokens        = sizeof(struct iw_pmksa),
                .max_tokens        = sizeof(struct iw_pmksa),
        },
};

以前我没见过这样的声明方法,我就自己模仿这种声明自己写了一个,大概推测出这种定义的概要:
1:用中括号来描述数组中某个变量的位置(下标值)
2:下标值并不一定从0开始,可以跳跃式的定义
3:在大括号中用"."开头引用成员变量的名称然后用"="赋值,可以给全部变量赋值,也可以部分赋值
4:数组的大小取决于中括号最大的数字的大小

我用自己写的代码验证,结果用C语言编的程序可以正常编译,结果也正确,但是将文件名改为.cpp,用gcc编译就不通过了,
不知道这是怎么回事,是不是我楼掉了什么呢
清高手指点一下

你可能感兴趣的:(C语言)