C/C++技巧
+ -

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)

0 篇笔记 写笔记

作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!