Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

Отличие делфишного CASE от сишного SWITCH   Найти похожие ветки 

 
StriderMan ©   (2006-08-15 13:06) [0]

вот такой код на делфи к сожалению не прокатывает

procedure DoSmth(AVal: integer);
begin
 case AVal of
 1: ShowmEssage("1");
 2: ShowMessage("2");
 1..2: ShowMessage("1 or 2");
 end;
end;


насколько я помню, на сях такое сделать можно. Почему так?


 
Romkin ©   (2006-08-15 13:08) [1]

Потому что case выполняет только один пункт, первый из подходящих. После этого выходит из case.


 
Nic ©   (2006-08-15 13:08) [2]

Зачем нужна эта строка? :
1..2: ShowMessage("1 or 2");


 
Джо ©   (2006-08-15 13:09) [3]

В C при обработке каждого из вариантов в Switch"e не происходит выход из блока Switch (нужен break).


 
Ega23 ©   (2006-08-15 13:12) [4]

procedure DoSmth(AVal: integer);
begin
Case AVal of
 1..2 begin
            case AVal of
            1: ShowmEssage("1");
            2: ShowMessage("2");
            end;
            ShowMessage("1 or 2");
        end;
  else Showmessage("not (1 or 2)");
end;
end;

?


 
Desdechado ©   (2006-08-15 13:13) [5]

В Си этоточка входа, а выход только по break, которого может и не быть вовсе. В Паскале же выполняется всегда только один кусок, что, имхо, правильнее.

Джо ©   (15.08.06 13:09) [3]
Да, иногда это удобно, когда выполнение проходит по совокупности последовательных веток. Но чаще является причиной скрытых ошибок.
Если я правильно помню, в C# это заблокировали.


 
StriderMan ©   (2006-08-15 13:14) [6]


> Ega23 ©   (15.08.06 13:12) [4]

ну типа того. только это громоздко.


> Nic ©   (15.08.06 13:08) [2]

например в случае в каждом конкретном случае выполняются какие-то действия, но скажем в случае 1,2 нужно сделать нечто общее, а в случае 3,4 нечто другое общее.


 
Ega23 ©   (2006-08-15 13:15) [7]


> ну типа того. только это громоздко.


Громоздко логику извращённую вертеть.


 
Плохиш ©   (2006-08-15 13:16) [8]


> StriderMan ©   (15.08.06 13:06)
> Почему так?

Ответ на этот вопрос находиться в описаниях языков.


 
Джо ©   (2006-08-15 13:17) [9]

> [5] Desdechado ©   (15.08.06 13:13)
> Но чаще является причиной скрытых
> ошибок.

Согласен.


> Если я правильно помню, в C# это заблокировали.

Заблокировали. Пока break не поставишь, компилятор будет ругаться.


 
Rouse_ ©   (2006-08-15 13:17) [10]


> Потому что case выполняет только один пункт, первый из подходящих.
>  После этого выходит из case.

без бряка еще и на default выскочит.



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
15-1156175964
Чапаев
2006-08-21 19:59
2006.09.10
Photoshop. Прозрачность.


2-1155730820
Shaman_
2006-08-16 16:20
2006.09.10
Освободить память после function MyFunction:TMemoryStream;


15-1155037865
Lexiy
2006-08-08 15:51
2006.09.10
Прием на работу


2-1156281523
ArtemESC
2006-08-23 01:18
2006.09.10
Содержимое консоли консольного приложения...


2-1156043410
Mikes
2006-08-20 07:10
2006.09.10
Запуск приложения в DELPHI.