Являются ли тройные точки внутри регистра (case '0'… '9' :) допустимым синтаксисом переключения языка C?

Я заметил это в файлах с открытым исходным кодом для программного обеспечения DRBD ( user / drbdtool_common.c )

const char* shell_escape(const char* s)
{
    /* ugly static buffer. so what. */
    static char buffer[1024];
    char *c = buffer;

    if (s == NULL)
        return s;

    while (*s) {
        if (buffer + sizeof(buffer) < c+2)
            break;

        switch(*s) {
        /* set of 'clean' characters */
        case '%': case '+': case '-': case '.': case '/':
        case '0' ... '9':
        case ':': case '=': case '@':
        case 'A' ... 'Z':
        case '_':
        case 'a' ... 'z':
            break;
        /* escape everything else */
        default:
            *c++ = '\\';
        }
        *c++ = *s++;
    }
    *c = '\0';
    return buffer;
}

Я никогда не видел такой конструкции «тройной точки» ( case '0' ... '9': ) в C ранее. Это действующий стандартный язык C? Или это какая-то магия препроцессора? Что тут происходит?

13
задан Ebrahim Byagowi 29 November 2016 в 11:04
поделиться