What is this "[0 ... 255] =" syntax in C?

CGcc Extensions

C Problem Overview


Refering to js0n.c

The code syntax is as below:

    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;

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

Can anyone explain what is being done here? What does syntax [0 ... 255] and &&l_bad do here?

C Solutions


Solution 1 - C

... is an extension provided by GCC

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

> To initialize a range of elements to the same value, write [first ... > last] = value. This is a GNU extension. For example, > > int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

&& is another extension

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

> You can get the address of a label defined in the current function (or > a containing function) with the unary operator &&. The value has > type void *. This value is a constant and can be used wherever a > constant of that type is valid. For example: > > void ptr; > / ... */ > ptr = &&foo;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGaurav KView Question on Stackoverflow
Solution 1 - Cuser657267View Answer on Stackoverflow