GNU C语言结构体的部分初始化
2024-04-30
2
0
学习LINUX源代码,在看
https://elixir.bootlin.com/linux/v5.5-rc2/source/drivers/usb/gadget/function/f_uvc.c
看到代码如下:
#define UVC_STRING_CONTROL_IDX 0
#define UVC_STRING_STREAMING_IDX 1
struct usb_string {
u8 id;
const char *s;
};
static struct usb_string uvc_en_us_strings[] = {
[UVC_STRING_CONTROL_IDX].s = "UVC Camera",
[UVC_STRING_STREAMING_IDX].s = "Video Streaming",
{ }
};
可以看到uvc_en_us_strings明显是一个数组,不过由于本人对GNU C的扩展不熟,故只能通过测试代码来验证:
#include <stdio.h>
struct st
{
int a;
char* b;
};
int main()
{
struct st s[] =
{
[1].b="000000000",
[2].b="1111111",
{}
};
int x = sizeof(s)/sizeof(s[0]);
int i =0;
for(i=0;i<x;i++)
{
printf("%d -> %s\r\n",i,s[i].b);
}
return 0;
}
代码输出为:
array num is 4
[0] -> a=0,b=(null)
[1] -> a=0,b=000000000
[2] -> a=0,b=1111111
[3] -> a=0,b=(null)