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编译就不通过了,
不知道这是怎么回事,是不是我楼掉了什么呢
清高手指点一下