Информация об изменениях

Сообщение Re[5]: семантика switch/case от 16.12.2015 14:44

Изменено 16.12.2015 16:16 ononim

O>>ну, скажем for имеет совсем-совсем не такую семантику как while. И в каком-то особенно философском смысле for отличается от while как switch от if/else.
__>вот и я так ожидал, что "for отличается от while как switch от if/else", то есть, что первое является разновидностью синтаксического сахара второго (ведь for(<stat>_0; <condition>; <stat>_1){<body>} равносильно <stat>_0; while(<condition>){<body>; <stat>_1} ), а оказалось все не так


фор в отличие от вайла допускает отсутствие любой своей части, вплоть до
for (;;)

что кстати многие, включая меня, считают более адекватным выражением бесконечного цифра нежели while(1)

O>>Я кстати пред сообщение подкрепил примером.

__>ну, как бы да, для меня это пример из области программирования на "высокоуровневом ассемблере".
Просто чтото о чем вы не знали и внезапно узнали. Впрочем двоеточия после case'ов и тот факт что case'ы не приемлют ничего кроме констант как бы намекают на то, что они на метки больше похожи чем на if'ы и вообще сделано оно для облегчения оптимизатору строить оптимизированные таблицы переходов в подходящих дла того местах...

Чтонить банальнохитрое типа:
bool get_fileext(char *dst, size_t len, const char *src)
{    
    for ( len = (src = strrchr(src, '.') ) ? len : 0; (len > 1 && !!(*dst=*src)); --len,++src,++dst);
    *dst = 0;
    return !*src;
}

..с применением вайла будет выглядеть, примерно настолько же понятнее как многоэтажный switch-case переделанный на ифы. Но и настолько же длиннее.
Re[5]: семантика switch/case
O>>ну, скажем for имеет совсем-совсем не такую семантику как while. И в каком-то особенно философском смысле for отличается от while как switch от if/else.
__>вот и я так ожидал, что "for отличается от while как switch от if/else", то есть, что первое является разновидностью синтаксического сахара второго (ведь for(<stat>_0; <condition>; <stat>_1){<body>} равносильно <stat>_0; while(<condition>){<body>; <stat>_1} ), а оказалось все не так


фор в отличие от вайла допускает отсутствие любой своей части, вплоть до
for (;;)

что кстати многие, включая меня, считают более адекватным выражением бесконечного цикла нежели while(1)

O>>Я кстати пред сообщение подкрепил примером.

__>ну, как бы да, для меня это пример из области программирования на "высокоуровневом ассемблере".
Просто чтото о чем вы не знали и внезапно узнали. Впрочем двоеточия после case'ов и тот факт что case'ы не приемлют ничего кроме констант как бы намекают на то, что они на метки больше похожи чем на if'ы и вообще сделано оно для облегчения оптимизатору строить оптимизированные таблицы переходов в подходящих дла того местах...

Чтонить банальнохитрое типа:
bool get_fileext(char *dst, size_t len, const char *src)
{    
    for ( len = (src = strrchr(src, '.') ) ? len : 0; (len > 1 && !!(*dst=*src)); --len,++src,++dst);
    *dst = 0;
    return !*src;
}

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