Delphi напечатал константы в регистрах - PullRequest
7 голосов
/ 08 июня 2010

Какой самый элегантный (или наименее уродливый) способ использования типизированных констант в операторе case в Delphi?

То есть для этого вопроса предположим, что вам нужно объявить типизированную константу, как в

const
  MY_CONST: cardinal = $12345678;
  ...

Тогда компилятор Delphi не примет

case MyExpression of
  MY_CONST: { Do Something };
  ...
end;

но вам нужно написать

case MyExpression of
  $12345678: { Do Something };
  ...
end;

, который подвержен ошибкам, трудно обновляется и не элегантен.

Есть ли какой-нибудь прием, который вы можете использовать, чтобы компилятор вставил значение константы (предпочтительно, проверяя значение константы в const в исходном коде, но, возможно, просматривая значение во время выполнения)? Здесь мы предполагаем, что вы не будете изменять значение «константы» во время выполнения.

Ответы [ 3 ]

12 голосов
/ 08 июня 2010

В зависимости от почему вам нужно набрать константу, вы можете попробовать что-то вроде

const
  MY_REAL_CONST = Cardinal($12345678);
  MY_CONST: Cardinal = MY_REAL_CONST;

case MyExpression of
  MY_REAL_CONST: { Do Something };
  ...
end;
4 голосов
/ 08 июня 2010

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

0 голосов
/ 08 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...