Re[6]: синтаксис switch
От: WolfHound  
Дата: 25.06.04 17:51
Оценка:
Здравствуйте, TheCat, Вы писали:

TC>а вообще надо было совсем goto совсем запретить.)) !

Ну тут не все так однозначно. Если код генерит машина то goto может быть полезен. Особенно при генерации конечных автоматов.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: синтаксис switch
От: Nick_ Россия  
Дата: 26.06.04 18:00
Оценка:
switch — это goto на метку, а case n: — это метка.
попробуйте такой код:
switch(x)
do
{
case 1:
// ...
case 2:
// ...
case 3:
// ...
} while(1);

oRover wrote:

> почему в Си-подобных языках синтаксис switch не так, как у остальных

> операторов (точнее синтаксис case'ов внутри). Это двоеточие после case...
> и break, который завершает case. Смахивает на паскаль с его begin-end...
Posted via RSDN NNTP Server 1.9 beta
Re[5]: синтаксис switch
От: MShura  
Дата: 28.06.04 11:52
Оценка:
MN>IMHO наиболее удачным был бы подход чем-то похожий на C#-овский, но без break:

MN>
MN>switch(i)
MN>{
MN>    case 1:
MN>    {
MN>        i += 1; // Обычный case
MN>    }
MN>    case 2:
MN>    case 3:
MN>    {
MN>        i += 2; // Объединение case-ов
MN>    }
MN>    default:
MN>    {
MN>    }
MN>};
MN>


MN>Так было бы намного удобнее — и проблема забытых break`ов решена, и объединение

case-ов есть, и безусловный переход (break) отсутствует.
IMHO сушествующий switch() самый лучший.
Очень часто бывает, что после выполнения case 1: нужно выполнить то что написано в case 2,3, причем код нетривиальный. Как быть в этом случае? Goto?
Re[6]: синтаксис switch
От: oRover Украина  
Дата: 28.06.04 15:02
Оценка: -1
Здравствуйте, MShura, Вы писали:


MN>>IMHO наиболее удачным был бы подход чем-то похожий на C#-овский, но без break:


MN>>
MN>>switch(i)
MN>>{
MN>>    case 1:
MN>>    {
MN>>        i += 1; // Обычный case
MN>>    }
MN>>    case 2:
MN>>    case 3:
MN>>    {
MN>>        i += 2; // Объединение case-ов
MN>>    }
MN>>    default:
MN>>    {
MN>>    }
MN>>};
MN>>


MN>>Так было бы намного удобнее — и проблема забытых break`ов решена, и объединение

MS>case-ов есть, и безусловный переход (break) отсутствует.
MS>IMHO сушествующий switch() самый лучший.
MS>Очень часто бывает, что после выполнения case 1: нужно выполнить то что написано в case 2,3, причем код нетривиальный. Как быть в этом случае? Goto?

ну, в гипотетическом коде, приведенном выше, и так 2 и 3 после 1 выполнится
... << Rsdn@Home 1.1.4 beta 1 >>
Re[6]: синтаксис switch
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 29.06.04 03:40
Оценка:
Здравствуйте, MShura, Вы писали:

MS>IMHO сушествующий switch() самый лучший.

MS>Очень часто бывает, что после выполнения case 1: нужно выполнить то что написано в case 2,3, причем код нетривиальный. Как быть в этом случае? Goto?

Не делать так вообще. А если код не тривиальный оформить его в виде отдельной функции (метода) и вызывать из одного, двух, трёх case-ов...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[7]: синтаксис switch
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 29.06.04 03:41
Оценка:
Здравствуйте, oRover, Вы писали:

R>Здравствуйте, MShura, Вы писали:



MN>>>IMHO наиболее удачным был бы подход чем-то похожий на C#-овский, но без break:


MN>>>
MN>>>switch(i)
MN>>>{
MN>>>    case 1:
MN>>>    {
MN>>>        i += 1; // Обычный case
MN>>>    }
MN>>>    case 2:
MN>>>    case 3:
MN>>>    {
MN>>>        i += 2; // Объединение case-ов
MN>>>    }
MN>>>    default:
MN>>>    {
MN>>>    }
MN>>>};
MN>>>


MN>>>Так было бы намного удобнее — и проблема забытых break`ов решена, и объединение

MS>>case-ов есть, и безусловный переход (break) отсутствует.
MS>>IMHO сушествующий switch() самый лучший.
MS>>Очень часто бывает, что после выполнения case 1: нужно выполнить то что написано в case 2,3, причем код нетривиальный. Как быть в этом случае? Goto?

R>ну, в гипотетическом коде, приведенном выше, и так 2 и 3 после 1 выполнится


Нет. Вы не поняли идею — блок case`а завершается закрывающейся скобкой безо всякого break.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[8]: синтаксис switch
От: oRover Украина  
Дата: 29.06.04 08:39
Оценка:
Здравствуйте, Mr. None, Вы писали:

R>>ну, в гипотетическом коде, приведенном выше, и так 2 и 3 после 1 выполнится


MN>Нет. Вы не поняли идею — блок case`а завершается закрывающейся скобкой безо всякого break.


првильно, вместо break закрывающая скобка. В чем проблема я так и не понял...
... << Rsdn@Home 1.1.4 beta 1 >>
Re[9]: синтаксис switch
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 29.06.04 08:42
Оценка:
Здравствуйте, oRover, Вы писали:

R>Здравствуйте, Mr. None, Вы писали:


R>>>ну, в гипотетическом коде, приведенном выше, и так 2 и 3 после 1 выполнится


MN>>Нет. Вы не поняли идею — блок case`а завершается закрывающейся скобкой безо всякого break.


R>првильно, вместо break закрывающая скобка. В чем проблема я так и не понял...


2 и 3 после 1 не выполняются — выполняется либо 1, либо 2 и 3.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[6]: синтаксис switch
От: pintelou  
Дата: 29.06.04 09:53
Оценка:
MN>>
MN>>switch(i)
MN>>{
MN>>    case 1:
MN>>    {
MN>>        i += 1; // Обычный case
MN>>    }
MN>>    case 2:
MN>>    case 3:
MN>>    {
MN>>        i += 2; // Объединение case-ов
MN>>    }
MN>>};
MN>>


MS>Очень часто бывает, что после выполнения case 1: нужно выполнить то что написано в case 2,3, причем код нетривиальный. Как быть в этом случае? Goto?


Никаких goto. Лучше придумать еще один оператор nobreak (или fallthrough).
Re[10]: синтаксис switch
От: oRover Украина  
Дата: 29.06.04 10:08
Оценка:
Здравствуйте, Mr. None, Вы писали:

R>>првильно, вместо break закрывающая скобка. В чем проблема я так и не понял...


MN>2 и 3 после 1 не выполняются — выполняется либо 1, либо 2 и 3.


почему нельзя сделать так, чтобы выполнился и 1 и 2,3 ? по-моему, синтаксически лочично. If'ы то выполняются один за другим
... << Rsdn@Home 1.1.4 beta 1 >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.