programing

LPVOID와 보이드의 차이*

goodcopy 2022. 7. 28. 22:38
반응형

LPVOID와 보이드의 차이*

사용할 수 있습니까?void*대신LPVOIDC로요?

또는LPVOID보다 특별한 기능을 수행하다void*.

거기에는 없다LPVOIDC를 입력해 주세요.이것은 Windows에 관한 것입니다.

이러한 종류의 것이 존재하는 이유는 소스 코드에 영향을 주지 않고 릴리스마다 기본 유형을 변경할 수 있기 때문입니다.

예를 들어 Microsoft C 컴파일러의 초기 버전은 16비트입니다.int및 32비트long다음과 같은 간단한 방법을 사용할 수 있습니다.

typedef long INT32

음, 32비트 정수 타입이 있네요.

이제 Microsoft C가 32비트를 사용하는 시기로 몇 년 더 거슬러 올라가 보겠습니다.int및 64비트long소스코드가 올바르게 기능하도록 하기 위해서, 간단하게 변경해 주세요.typedef읽을 행:

typedef int INT32

이것은, 유저·피규어·피규어·피규어·피규어·피규어·피규어·피규어를 사용하는 경우long32비트 정수 타입에 대응합니다.모든 소스 코드를 검토하여 자신의 정의를 변경해야 합니다.

호환성의 관점(다른 버전의 Windows간의 호환성)에서는, Microsoft 의 데이터 타입을 사용하는 것이 훨씬 깨끗합니다.

당신의 구체적인 질문에 대한 답변으로, 아마도void*대신LPVOID 정의를 내리면 LPVOID 는 변경되지 않을 것으로 예상됩니다.

하지만 만약을 위해 그러지 않을 거야.마이크로소프트가 미래에 일반적인 포인터를 처리하는 다른 방법을 도입할 수 있는지 여부를 알 수 없습니다.LPVOIDMicrosoft 의 타입을 사용해도, 실제로는 아무것도 손실되지 않습니다만, 향후, 정의가 변경되어 기본 타입을 사용하기로 결정했을 경우, 몇개의 작업이 필요하게 될 가능성이 있습니다.

포인터가 이러한 종류의 변화에 영향을 받지 않을 것이라고 생각할 수도 있지만, 윈도우가 만들어진 초기 8088일 동안 포인터와 메모리 모델(tiny, small, large, large 등)에는 같은 환경에서도 다양한 크기의 포인터가 존재했다.

LPVOIDWindows API에 불과합니다.typedef위해서void*.

LPVOID는 모든 유형의 포인터입니다.이 유형은 WinDef.h에서 typedef void *LPVOID로 선언됩니다.

LPVOID는

typedef void* LPVOID

에 정의되어 있다.Windef.h모든 윈도 데이터 타입이 정의되어 있습니다.

void*를 사용하여 모든 유형을 가리킬 수 있습니다.

언급URL : https://stackoverflow.com/questions/1987957/difference-between-lpvoid-and-void

반응형