Сообщение Re[5]: семантика switch/case от 16.12.2015 14:44
Изменено 16.12.2015 14:54 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} ), а оказалось все не так
фор в отличие от вайла допускает отсутствие любой своей части, вплоть до
что кстати многие, включая меня, считают более адекватным выражением бесконечного цифра нежели while(1)
O>>Я кстати пред сообщение подкрепил примером.
__>ну, как бы да, для меня это пример из области программирования на "высокоуровневом ассемблере".
Просто чтото о чем вы не знали и внезапно узнали. Впрочем двоеточия после case'ов как бы напоминают что они на метки больше похожи чем на if'ы но... Чтонить банальнохитрое типа:
..с применением вайла будет выглядеть, примерно настолько же понятнее как многоэтажный switch-case переделанный на ифы. Но и настолько же длиннее.
__>вот и я так ожидал, что "for отличается от while как switch от if/else", то есть, что первое является разновидностью синтаксического сахара второго (ведь for(<stat>_0; <condition>; <stat>_1){<body>} равносильно <stat>_0; while(<condition>){<body>; <stat>_1} ), а оказалось все не так

фор в отличие от вайла допускает отсутствие любой своей части, вплоть до
for (;;)
что кстати многие, включая меня, считают более адекватным выражением бесконечного цифра нежели while(1)
O>>Я кстати пред сообщение подкрепил примером.
__>ну, как бы да, для меня это пример из области программирования на "высокоуровневом ассемблере".

Просто чтото о чем вы не знали и внезапно узнали. Впрочем двоеточия после 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 len > 1;
}
..с применением вайла будет выглядеть, примерно настолько же понятнее как многоэтажный 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} ), а оказалось все не так
фор в отличие от вайла допускает отсутствие любой своей части, вплоть до
что кстати многие, включая меня, считают более адекватным выражением бесконечного цифра нежели while(1)
O>>Я кстати пред сообщение подкрепил примером.
__>ну, как бы да, для меня это пример из области программирования на "высокоуровневом ассемблере".
Просто чтото о чем вы не знали и внезапно узнали. Впрочем двоеточия после case'ов и тот факт что case'ы не приемлют ничего кроме констант как бы намекают на то, что они на метки больше похожи чем на if'ы и вообще сделано оно для облегчения оптимизатору строить оптимизированные таблицы переходов в подходящих дла того местах...
Чтонить банальнохитрое типа:
..с применением вайла будет выглядеть, примерно настолько же понятнее как многоэтажный switch-case переделанный на ифы. Но и настолько же длиннее.
__>вот и я так ожидал, что "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 len > 1;
}
..с применением вайла будет выглядеть, примерно настолько же понятнее как многоэтажный switch-case переделанный на ифы. Но и настолько же длиннее.