programing tip

C에서이 "[0… 255] ="구문은 무엇입니까?

itbloger 2020. 8. 6. 08:01
반응형

C에서이 "[0… 255] ="구문은 무엇입니까?


로 다스 려 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]이며 &&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

단항 연산자를 사용하여 현재 함수 (또는 포함 함수)에 정의 된 레이블의 주소를 얻을 수 있습니다 &&. 값의 유형은 void *입니다. 이 값은 상수이며 해당 유형의 상수가 유효한 모든 곳에서 사용할 수 있습니다. 예를 들면 다음과 같습니다.

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

참고 URL : https://stackoverflow.com/questions/30388594/what-is-this-0-255-syntax-in-c

반응형