2011-02-10 7 views
-1

:Delphi XE에서 LongWord와 Cardinal의 차이점은 무엇입니까? 이 코드는 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의 차이점은 무엇입니까?

+2

D2007에서는 정상적으로 컴파일됩니다. [문서] (http://docwiki.embarcadero.com/RADStudio/XE/en/Simple_Types)에 따르면 여전히 차이가 없어야합니다. –

+1

동의했다. 차이가 없어야하고 64 비트 버전이 나오더라도 여전히 차이가 없다. –

+1

D2010에서 컴파일 됨 – Bharat

답변

3

대담 할 예정이며 상태는 * 입니다. 차이는입니다. 당신은 어떻게 든 잘못된 결론에 도달했고, 우리에게 당신을 도와 줄 정보가 충분하지 못했습니다. 나는 여기에 코드의 1 : 1 복사본을 붙여 넣지 않았다고 확신하고, 당신은 관련있는 것을 버렸다.

개봉 괄호 앞에 약간의 univisble 유니 코드 문자를 붙여 놓은 악의적 인 직장 동료 일 수 있으며, 다른 곳에있는 동일한 문자를 함수로 정의 할 수 있습니다. 그것은 또한 좀 더 명백한 것이 될 수도 있습니다.

깨끗한 프로젝트에서 문제를 재현 할 수 있습니까? 나는 네가 할 수 없다고 확신하기 때문에. 가능하다면 다시 게시하십시오. 할 수 없다면 더 많은 문맥을 게시하십시오. 꼭 틀린 것을 증명하십시오.

+1

+1.

+1

그렇지 않으면 OP는 문제를 수정 한 Rad XE update 1을 설치하기 만하면됩니다. 그렇지 않으면 OP는 LongWord : Boolean과 같은 멋진 함수 이름을 가진 코드를 사용하고 있습니다. –

0

아래의 코드는 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

+0

"상수 표현이 예상 됨"을 트리거하는 것은 아주 재 정의되어야합니다. 내가 생각해내는 가장 가까운 추측은 그것을 4- 인자 함수로 정의한 다음, 어떻게 든 등호를 입력하는 것을 잊어 버리는 것입니다. 아마도 대입 연산자가있는 레코드가 트릭을 수행 할 것입니까? –

1

당신은 당신의 코드에서 긴 단어 어딘가에라는 함수가있을 수 있습니다.

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

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