Это мой персональный дневник. Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Диапазоны в Си

Почитал тут на досуге какие ещё расширения есть у «ГНУ Си». Хотя я их и не использую, но знать не помешает. Оказалось, что там много такого, что лично мне хотелось бы видеть в языке. Например, хорошая штука — диапазоны. Выглядят они так:

const char *whatisit(char code) {
    switch (code) {
        case 'a' ... 'z':
            return "lowercase";
        case 'A' ... 'Z':
            return "capital";
        case '0' ... '9':
            return "digit";
        case 0 ... 31:
            return "special";
        default:
            return "unknown";
    }
}

Но написал я про них не только потому что мне нравится конструкция, но и потому, что оказалось, что меня неконсистентно бесит пробел слева от многоточия, который надо обязательно поставить, если диапазон начинается в цифры.

Если его не будет, компилятор подумает, что перед ним число с плавающей точкой и заругается на ошибку синтаксиса.

Непонятно почему меня это так раздражает. Ну пробел, это же не первый синтаксический костыль, который я вижу, но почему-то именно тут он мне кажется очень некрасивым.

2 комментария
Роман 2023

В паскале такое спокойно работает без лишних пробелов. Тут возможно дело в несовершенстве компилятора, но все равно странно.

Евгений Степанищев 2023

Странно, да, возможно какие-то трудности при построении дерева при парсинге.

Креведко Медведев 2023

Пример немного странный: 0 ... 9 — это же непечатаемые символы?
(Да, с апострофами будет пример не по теме.)

Евгений Степанищев 2023

Ха, точно ))) Сейчас поправлю )