XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
J
expert
offline
Опыт: 48,447
Активность:
принцып работы этих примеров настолько различны что сравнение считаю неверным=)
Старый 19.11.2008, 13:58
ScorpioT1000
Работаем
online
Опыт: отключен
Цитата:
принцып работы этих примеров настолько различны что сравнение считаю неверным=)

+1. Там нет свича, в жассе. и все. это всеравно что сравнивать циклы и рекурсивные ф-ции
Старый 19.11.2008, 14:01
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
принцып работы этих примеров настолько различны что сравнение считаю неверным=)

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

Цитата:
Там нет свича, в жассе. и все. это всеравно что сравнивать циклы и рекурсивные ф-ции

гений детектед :pray:
Старый 19.11.2008, 18:50
user_jasser

offline
Опыт: 232
Активность:
Цитата:
принцып работы этих примеров настолько различны что сравнение считаю неверным=)

Jon обоснуй..

вот единственно верный оф_ документ тут и про case (swich) тоже есть...
^^^
Старый 20.11.2008, 01:53
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Jon обоснуй..
не потрудись поискать в гугле как работает switch а как if

Отредактировано Jon, 20.11.2008 в 12:56.
Старый 20.11.2008, 03:59
Elemental
Element Of Water
offline
Опыт: 1,072
Активность:
Адольф, ну через ИФ перебирать то это и так понятно.. Но хотелось бы всё таки именно СВИТЧ.. Он по-моему намного удобнее ИФов..
(Думаю данный вопрос о СВИТЧ закрыт)
Старый 20.11.2008, 08:42
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Elemental
Проблема-то в том, что это джазз, ане с++. Тут свитча просто нет. Есть exitwhen и return.
Старый 20.11.2008, 09:12
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
как работает switch а как if

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

ну это с моей кулхацкерской точки зрения
Старый 20.11.2008, 13:23
J
expert
offline
Опыт: 48,447
Активность:
по крайне мере кореное отличие в оптимальности, if будет по порядку все условия проходить, и условия моут быть любыми, а свитч сразу находит нужное значение, будть оно 1-ым или 666-ым в списке, и оно должно быть int и извесно на этапе компиляции, ничего схожего невижу...
Старый 20.11.2008, 13:38
NETRAT

offline
Опыт: 83,712
Активность:
Цитата:
витч сразу находит нужное значение
откуда такие данные?
Цитата:
свитч сразу находит нужное значение
дезинформация, как ты думаешь почему в кейсах ставятся break если это простой оператор исключающего выбора?

напиши этот оператор в C и посмотри во что он компилится
никаких коренных отличий в работе операторов нет

вообще советую внимательно MSDN почитать...
Старый 20.11.2008, 13:41
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
витч сразу находит нужное значение

это не правда

» cpp
Код:
// dev-cpp 4.9.9.2

int main ()
{
    int rx=0x00;
    rx=0x01;
    rx=0x01;
    rx=0x01;
    rx=0x01;
    rx=0x01;
    rx=0x01;
    rx=0x01;
    
    switch(rx){
    case 00:
         rx=10;
         break;
    case 01:
         rx=11;
         break;
    default:
         rx=12;
    }
         
    if (rx==00)
    {
    rx=10;
             }
    else if (rx==01)
    {
    rx=11;     
             }
    else
    {
    rx=12;
         }

    return 0x00;
}


» а вот что мне говорит по этому поводу оля *love*
Код:
00401290  /$ 55                  PUSH EBP
00401291  |. 89E5                MOV EBP,ESP
00401293  |. 83EC 18             SUB ESP,18
00401296  |. 83E4 F0             AND ESP,FFFFFFF0
00401299  |. B8 00000000         MOV EAX,0
0040129E  |. 83C0 0F             ADD EAX,0F
004012A1  |. 83C0 0F             ADD EAX,0F
004012A4  |. C1E8 04             SHR EAX,4
004012A7  |. C1E0 04             SHL EAX,4
004012AA  |. 8945 F4             MOV DWORD PTR SS:[EBP-C],EAX
004012AD  |. 8B45 F4             MOV EAX,DWORD PTR SS:[EBP-C]
004012B0  |. E8 DB040000         CALL for_disa.00401790
004012B5  |. E8 76010000         CALL for_disa.00401430
004012BA  |. C745 FC 00000000    MOV DWORD PTR SS:[EBP-4],0
004012C1  |. C745 FC 01000000    MOV DWORD PTR SS:[EBP-4],1
004012C8  |. C745 FC 01000000    MOV DWORD PTR SS:[EBP-4],1
004012CF  |. C745 FC 01000000    MOV DWORD PTR SS:[EBP-4],1
004012D6  |. C745 FC 01000000    MOV DWORD PTR SS:[EBP-4],1
004012DD  |. C745 FC 01000000    MOV DWORD PTR SS:[EBP-4],1
004012E4  |. C745 FC 01000000    MOV DWORD PTR SS:[EBP-4],1
004012EB  |. C745 FC 01000000    MOV DWORD PTR SS:[EBP-4],1
004012F2  |. 8B45 FC             MOV EAX,DWORD PTR SS:[EBP-4]

004012F5  |. 8945 F8             MOV DWORD PTR SS:[EBP-8],EAX
004012F8  |. 837D F8 00          CMP DWORD PTR SS:[EBP-8],0
004012FC  |. 74 08               JE SHORT for_disa.00401306
004012FE  |. 837D F8 01          CMP DWORD PTR SS:[EBP-8],1
00401302  |. 74 0B               JE SHORT for_disa.0040130F
00401304  |. EB 12               JMP SHORT for_disa.00401318
00401306  |> C745 FC 0A000000    MOV DWORD PTR SS:[EBP-4],0A
0040130D  |. EB 10               JMP SHORT for_disa.0040131F
0040130F  |> C745 FC 0B000000    MOV DWORD PTR SS:[EBP-4],0B
00401316  |. EB 07               JMP SHORT for_disa.0040131F
00401318  |> C745 FC 0C000000    MOV DWORD PTR SS:[EBP-4],0C

0040131F  |> 837D FC 00          CMP DWORD PTR SS:[EBP-4],0
00401323  |. 75 09               JNZ SHORT for_disa.0040132E
00401325  |. C745 FC 0A000000    MOV DWORD PTR SS:[EBP-4],0A
0040132C  |. EB 16               JMP SHORT for_disa.00401344
0040132E  |> 837D FC 01          CMP DWORD PTR SS:[EBP-4],1
00401332  |. 75 09               JNZ SHORT for_disa.0040133D
00401334  |. C745 FC 0B000000    MOV DWORD PTR SS:[EBP-4],0B
0040133B  |. EB 07               JMP SHORT for_disa.00401344
0040133D  |> C745 FC 0C000000    MOV DWORD PTR SS:[EBP-4],0C

00401344  |> B8 00000000         MOV EAX,0
00401349  |. C9                  LEAVE
0040134A  \. C3                  RETN


ADOLF добавил:
Цитата:
MOV EAX,0

за такое имхо афторов компиля надо расстреливать=/ © ADOLF
нда, это бред какой-то, хренова оптимизация... btw я olly уже давно на ida заменил © NT
спс, гляну что за зверь ида) мну больше добило что в начале с еаксом твориться © ADOLF

Отредактировано ADOLF, 20.11.2008 в 16:27.
Старый 20.11.2008, 13:58
J
expert
offline
Опыт: 48,447
Активность:
он не проверяет их все попорядку, точнее проверяет но не во всех случаях, он используется case как метки для перехода к нужному блоку кода, встречая инструкцию break делает переход сразу к следующей инструкции после свитча, это получается очень красиво когда case идут по порядку, если они например все четные компиль цука видит это и просто делит индексы меткок на 2, ну это чисто простейший пример, + это в некоторой степень зависит от компиля (у меня VS2008), также в некоторых комплях для этого должна быть в настройках проекта включена оптимизация

Отредактировано Jon, 20.11.2008 в 16:26.
Старый 20.11.2008, 15:44
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
он не проверяет их все попорядку

т.е. как это? как раз проверяет
Цитата:
если они например все четные компиль цука видит это и просто делит индексы меткок на 2, ну это чисто простейший пример, + это в некоторой степень зависит от компиля, также в некоторых комплях для этого должна быть в настройках проекта включена оптимизация

я конечно хз, мб и бывают такие мего умные компили, но имхо это уже исключение

вообще можно написать мегонавороченный алгоритм, к примеру если все значения с которыми сравнивается "расположены близко" (ну к примеру от 0 до 63) - сделать таблицу меток, и просто жампать по метке, но опять же это уже немного не о том)

ADOLF добавил:
хаха, поигрался с настройкой оптимизации... =) при средних настройках так и остаеться mov eax, 0. а дальше еще смешнее) вплоть до finit

мне мой внутренний голос подсказывает что в этом коде фпу ну никак не нужен... ладно, ясно что компиль кг/ам
Старый 20.11.2008, 16:50
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от ADOLF
вообще можно написать мегонавороченный алгоритм, к примеру если все значения с которыми сравнивается "расположены близко" (ну к примеру от 0 до 63) - сделать таблицу меток, и просто жампать по метке, но опять же это уже немного не о том)
Цитата:
Сообщение от Jon
это получается очень красиво когда case идут по порядку
я же вродебы о томже говорил?

Отредактировано Jon, 20.11.2008 в 17:05.
Старый 20.11.2008, 16:59
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
я же вродебы о томже говорил?

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

чудес не бывает © ADOLF
Старый 20.11.2008, 17:06
J
expert
offline
Опыт: 48,447
Активность:
ну естествено нельзя будет сформировать таблицу меток во всех случаях, но именно так вроде свитч и работает в идиале :хз:
Цитата:
тогда все case должны были бы быть с бриками
почему?

Jon добавил:
во http://forum.ztu.edu.ua/showthread.php?p=73532 6 пост

Отредактировано Jon, 20.11.2008 в 20:47.
Старый 20.11.2008, 17:15
adic3x

offline
Опыт: 108,439
Активность:
ок, ну там как я и говорил, это относиться только к свитчам, которые все с бриками, не имеют дефолта, и сравниваемые значение идут рядом, и то это делает хз каждый ли компиль, более того с точки зрения алгоритма это вообще не как не влияет на выходные данные
вобщем разговор можно считать оконченным
Старый 21.11.2008, 10:29
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:41.