C中是什么“ =”语法?

参考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, // AZ [97 ... 122] = &&l_bare // az }; ........ ....... l_bad: *vlen = cur - json; // where error'd return 0; ........ ........ 

任何人都可以解释在这里做什么? 语法[0 ... 255]&&l_bad在这里做什么?

...是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

您可以使用一元运算符&&获得当前函数(或包含函数)中定义的标签的地址。 该值具有typesvoid * 。 这个值是一个常量,可以用在任何types的常量有效的地方。 例如:

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