参考js0n.c

代码语法如下所示:

    static void *gostruct[] =
    {
        [0 ... 255] = &&l_bad,
        ['\t'] = &&l_loop, [' '] = &&l_loop, ['\r'] = &&l_loop, ['\n'] = &&l_loop,
        ['"'] = &&l_qup,
        [':'] = &&l_loop, [','] = &&l_loop,
        ['['] = &&l_up, [']'] = &&l_down, // tracking [] and {} individually would allow fuller validation but is really messy
        ['{'] = &&l_up, ['}'] = &&l_down,
        ['-'] = &&l_bare, [48 ... 57] = &&l_bare, // 0-9
        [65 ... 90] = &&l_bare, // A-Z
        [97 ... 122] = &&l_bare // a-z
    };

........
.......

l_bad:
    *vlen = cur - json; // where error'd
    return 0;

........
........

有人能解释一下这里在做什么吗?语法[0 ... 255]

推荐答案

...是GCC提供的扩展

https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated-Inits

要将一系列元素初始化为相同的值,请写入[first ... last] = value.这是GNU扩展.例如

 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

&&是另一个扩展

https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels-as-Values

可以获取当前函数(或)中定义的标签的地址

 void *ptr;
 /* ... */
 ptr = &&foo;

C++相关问答推荐

C限制限定符是否可以通过指针传递?

GCC不警告隐式指针到整数转换'

如何调试LD_PRELOAD库中的构造函数?

使用scanf在C中读取和存储文件中的值

Square不与Raylib一起移动

在句子中转换单词的问题

等同于铁 rust 的纯C语言S未实现!()宏

链接到底是如何工作的,我在这里到底做错了什么

这个空指针类型的转换是有效代码还是恶意代码?

GCC错误,共享内存未定义引用?

我应该在递归中使用全局变量吗

错误:字符串在C中获得意外输出

为什么一个在线编译器拒绝这个VLA代码,而本地的Apple clang却不拒绝;t?

在哪里可以找到叮当返回码的含义?

C中2个数字的加法 - 简单的人类方法

macos/arm64 上地址空间不使用第一位吗?

是什么阻止编译器优化手写的 memcmp()?

变量的指针右对齐,函数的指针左对齐

如何转义包含指令中的字符?

为什么实现文件中的自由函数默认没有内部链接?