![](/uploads/posts/2022-08/switch-cases.png)
Содержание статьиИщем операторы switch-case-break в бинарном кодеОтличия switch от оператора case языка PascalОбрезка длинных деревьевСложные случаи балансировки, или оптимизирующая балансировкаВетвления в case-обработчикахИтогиВ этой статье мы изучим оператор выбора switch. Давай разберемся, какие формы он может принять в двоичном коде, как разные компиляторы транслируют его и как его найти в дизассемблированном коде по характерным признакам. Ищем операторы switch-case-break в бинарном кодеДля улучшения читабельности программ в язык C был введен оператор множественного выбора — switch. В Delphi с той же самой задачей справляется оператор CASE, более гибкий, чем его C-аналог, но об их различиях мы поговорим позднее.Легко показать, что switch эквивалентен такой конструкции:IF (a == x1) THEN оператор1
ELSE IF (a == X2) THEN оператор2
IF (a == X2) THEN оператор2
IF (a == X2) THEN оператор2
ELSE ... оператор по умолчаниюЕсли изобразить это ветвление в виде логического дерева, то образуется характерная «косичка».Трансляция оператора switch в общем случаеКазалось бы, идентифицировать switch никакого труда не составит — даже не строя дерева, невозможно не обратить внимание на длинную цепочку гнезд, проверяющих истинность условия равенства некоторой переменной с серией непосредственных значений
Скачать:
Скриншоты:
Важно:
Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.