Programming

왜 C ++에서 부호없는 int 대신 DWORD를 사용합니까?

procodes 2020. 7. 19. 18:24
반응형

왜 C ++에서 부호없는 int 대신 DWORD를 사용합니까? [복제]


이 질문에는 이미 답변이 있습니다.

나는 다소 C ++ 초보자라는 것을 두려워하지 않으므로 이것은 바보 같은 질문처럼 보일 수 있지만 ....

코드 예제에서 DWORD가 사용되는 것을 볼 수 있습니다. DWORD가 실제로 무엇을 의미하는지 살펴보면 분명히 부호없는 int (0 ~ 4,294,967,295)입니다. 그렇다면 제 질문은 왜 DWORD를 가지고 있습니까? 정수형 'unsigned int'가 그렇지 않다는 것은 무엇입니까? 이식성과 기계의 차이점과 관련이 있습니까?


DWORDC ++ 유형이 아니며에 정의되어 <windows.h>있습니다.

그 이유는 DWORDWindows 기능에 따라 특정 범위와 형식이 사용되므로 특정 범위가 필요한 경우 해당 유형을 사용하십시오. (또는 그들이 "로마에있을 때, 로마인들이하는 것과 같이하십시오"라고 말한 것처럼) 여러분에게 이것은 그에 해당하는 unsigned int일이지만 항상 그런 것은 아닙니다. 안전을 위해, 사용 DWORDA를 할 때 DWORD예상되는 관계없이 실제로 어떻게 될 것인가의.

예를 들어, 범위 나 형식을 변경 한 경우 동일한 요구 사항을 유지하기 위해 unsigned int다른 유형을 사용할 수 있으며 사용하는 DWORD모든 코드 DWORD는 현명하지 않습니다. (마찬가지로 그들은 DWORD필요가 있다고 결정 unsigned long long하고 변경할 수 있으며 사용하는 모든 코드 DWORD는 현명하지 않습니다.)


또한 0에서 4,294,967,295의 범위를 가질 필요 unsigned int없습니다 . 여기를 참조 하십시오 .


MS-DOS 및 Windows 3.1이 16 비트 모드에서 작동 할 때 Intel 8086 워드는 16 비트, Microsoft WORD는 16 비트, Microsoft DWORD는 32 비트, 일반적인 컴파일러의 부호없는 int는 16 비트였습니다.

Windows NT가 32 비트 모드에서 작동 할 때 Intel 80386 워드는 32 비트, Microsoft WORD는 16 비트, Microsoft DWORD는 32 비트, 일반적인 컴파일러의 부호없는 int는 32 비트였습니다. WORD 및 DWORD라는 이름은 더 이상 자기 설명 적이 지 않지만 Microsoft 프로그램의 기능을 유지했습니다.

Windows가 64 비트 모드에서 작동하는 경우 Intel 워드는 64 비트, Microsoft WORD는 16 비트, Microsoft DWORD는 32 비트, 일반적인 컴파일러의 부호없는 int는 32 비트입니다. WORD와 DWORD라는 이름은 더 이상 자기 설명이 아니며 부호없는 int는 더 이상 최소한의 놀람 원칙을 따르지 않지만 많은 프로그램의 기능을 유지합니다.

나는 WORD 또는 DWORD가 변할 것이라고 생각하지 않습니다.


SDK 개발자는 typedef를 사용하여 고유 한 유형을 정의하는 것을 선호합니다. 따라서 모든 클라이언트 코드를 변경하지 않고도 기본 유형을 한 곳에서만 변경할 수 있습니다. 이 규칙을 따르는 것이 중요합니다. DWORD는 변경되지 않지만 DWORD_PTR과 같은 유형은 Win32 및 x64와 같은 플랫폼마다 다릅니다. 따라서 일부 함수에 DWORD 매개 변수가있는 경우 DWORD를 사용하고 부호없는 int를 사용하지 마십시오. 코드는 향후 모든 Windows 헤더 버전에서 컴파일됩니다.


나 자신을 위해 unsigned int가 플랫폼마다 다르다고 가정합니다. 정수는 8 비트, 16 비트, 32 비트 또는 64 비트 일 수 있습니다.

반면 DWORD는 자체 크기 (더블 워드)를 지정합니다. 워드는 16 비트이므로 DWORD는 모든 플랫폼에서 32 비트로 알려져 있습니다.

참고 URL : https://stackoverflow.com/questions/2995251/why-in-c-do-we-use-dword-rather-than-unsigned-int

반응형