2012-12-20 4 views
3

저는 델파이 3에서 잘 작동하는 프로그램을 가지고 있으며, 터보 델파이 2006에서 컴파일 및 테스트를하고 문제를 발견했습니다. 문제는 이것입니다 : 나는 "추기경"데이터 형식을 인덱스로 사용했습니다. 델파이 3에서 작동했지만, 특정 데이터에 따라 128-256 정도 정도의 Turbo Delphi 2006 컴파일 버전보다 값이 더 큽니다. 이러한 데이터 형식을 "longint"로 변경하면 프로그램이 두 컴파일러에서 올바르게 작동하도록 문제가 해결되었습니다.응용 프로그램의 기본 유형이 변경된 이유는 무엇입니까?

질문 : 왜입니까?

저의 이해는 추기경 데이터 유형이 단지 부호없는 정수 데이터였습니다. 이것은 특히 Delphi 3 컴파일이 올바르게 작동했음을 증명하는이 프로그램의 응용 프로그램과 일치합니다. 그렇다면 터보 델파이 2006 컴파일은 왜 작동하지 않았습니까?

+0

코드없이 도움을 받기가 어렵습니다. –

+0

문제가 해결되었으므로 코드가 도움이되지 않습니다. 나는 내가 왜 내가 한 일을 관찰했는지 알고 싶었다. 나는 그 답이 아래에 있다고 믿는다. – Glenn1234

답변

5

Delphi에서 부호없는 유형은 다음으로 큰 부호 유형의 하위 범위 유형입니다. 델파이 3에는 64 비트 타입이 없으므로 Cardinal이 하위 카테고리가 될 다음 유형은 없습니다. 추기경은 언어의 기술적 한계로 인해 Delphi 3에서 서명 된 유형입니다. Delphi 4는 Int64를 도입했으며 Cardinal은 해당 유형의 부호없는 하위 범위로 만들어졌습니다. (제한 사항은 부호없는 64 비트 유형이 아니 었습니다).

요약하면 처음부터 서명되지 않은 실제 동작을 얻지 못했습니다. 이제 업그레이드를 했으므로 항상 코드에서 오랫동안 존재 해 왔던 문제를 발견했습니다.

코드를 컴파일해도 코드가 정확하다는 증거가 아닙니다. Delphi 3은 실제로 가지고 있지 않은 유형을 요구하는 규칙을 시행 할 수 없습니다.

+0

전혀 이해가 안됩니다. UInt64 란 무엇입니까? 보고 된 행동을 어떻게 설명 할 수 있습니까? –

+0

@David, UInt64는 훨씬 이전까지는 존재하지 않는 유형입니다. 델파이 버전이 한 자리수 (그리고 아마도 나중에) 일 때, 부호없는 유형은 더 큰 서명 된 유형의 하위 범위였습니다 : UInt64가 존재하려면 Int128 유형이 필요합니다. 나는 그것이 현대판에서 여전히 진실인지 여부를 확신하지 못한다. –

+0

Int128이 없습니다. 그러나 UInt64가 존재합니다. 그러나 나는 아직도 당신이 운전하는 것을 이해할 수 없습니다. 어디에서 더 배울 수 있습니까? –

관련 문제