Разница между LongWord и кардиналом в Delphi XE? - PullRequest
0 голосов
/ 10 февраля 2011

Этот код не компилируется в XE:

const
    InitSignature : array[0..3] of LongWord =
        ($67452301, $EFCDAB89, $98BADCFE, $10325476);

[Ошибка DCC]: E2026 Ожидается постоянное выражение

, но это ДЕЛАЕТ:

const
    InitSignature : array[0..3] of Cardinal =
    ($67452301, $EFCDAB89, $98BADCFE, $10325476);

Назначаетсятипизированные константы - ON.

Если я приведу все значения массива к LongWord в первом примере, код скомпилируется.Но я не могу понять, в чем разница между LongWord и Cardinal?

Ответы [ 3 ]

3 голосов
/ 10 февраля 2011

Я собираюсь быть смелым, и заявить * есть нет разница *. Вы как-то пришли к неверному выводу и предоставили нам недостаточно информации, чтобы помочь вам. Я убежден, что вы не вставили сюда копию своего кода 1: 1, и вы упустили что-то важное.

Может быть злой напарник, который вставил немного невидимого символа Юникод перед открывающей скобкой и определил этот же символ как функцию в другом месте Это также может быть что-то более очевидным.

Можете ли вы воспроизвести проблему в чистом проекте? Потому что я уверен, что ты не можешь. Если можете, отправьте обратно. Если не можете, опубликуйте больше контекста. Во что бы то ни стало, докажите, что я не прав.

1 голос
/ 11 февраля 2011

Возможно, в вашем коде есть функция с именем longword.

function LongWord: Integer;
begin
 result := 0;
end;

procedure Foo;
const
    InitSignature : array[0..3] of LongWord =
        ($67452301, $EFCDAB89, $98BADCFE, $10325476);
begin
  //...
end;
0 голосов
/ 10 февраля 2011

Код ниже хорошо компилируется в Delphi XE.

Покажите нам больше контекста вашего кода;похоже, что-то переопределяет LongWord для вас.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  InitSignatureLongWords : array[0..3] of LongWord =
    ($67452301, $EFCDAB89, $98BADCFE, $10325476);

const
  InitSignatureCardinals : array[0..3] of Cardinal =
    ($67452301, $EFCDAB89, $98BADCFE, $10325476);

begin
end.

- jeroen

...