windows.h가 근거리 및 원거리 매크로를 생성하지 못하도록 하는 깔끔한 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/118774

  •  02-07-2019
  •  | 
  •  

문제

WinDef.h 깊숙한 곳에는 세그먼트 메모리 시대의 유물이 있습니다.

#define far
#define near

이는 변수 이름을 가깝거나 멀리 사용하려고 하면 분명히 문제를 일으킵니다.깨끗한 해결 방법이 있습니까?그 다음에는 내 변수의 이름을 바꾸나요?

도움이 되었습니까?

해결책

다른 사람의 주장과 달리 안전하게 정의를 해제할 수 있습니다.그 이유는 그것들이 단지 매크로이기 때문입니다.정의와 정의 해제 사이의 전처리기에만 영향을 미칩니다.귀하의 경우에는 windows.h 초기부터 windows.h의 마지막 줄까지입니다.추가 창 헤더가 필요한 경우 windows.h 뒤와 #undef 앞에 포함합니다.코드에서 전처리기는 의도한 대로 기호를 변경하지 않고 그대로 둡니다.

이전 코드에 대한 설명은 부적합합니다.해당 코드는 독립적으로 컴파일된 별도의 라이브러리에 있습니다.매크로가 오래전에 사라진 링크 타임에만 연결됩니다.

다른 팁

포함시킨 후 원하지 않는 매크로를 정의 해제하세요. windows.h:

#include <windows.h>
#undef near
#undef far

아마도:

#undef near
#undef far

위험할 수도 있지만..

당신은 아마도 모든 곳에서 가까운 곳이나 먼 곳에서 정의되지 않기를 원하지 않을 것입니다.그러나 변수 이름을 사용해야 하는 경우 다음을 사용하여 매크로를 로컬로 정의 해제하고 작업이 끝나면 다시 추가할 수 있습니다.

#pragma push_macro("near")
#undef near
//your code here.
#pragma pop_macro ("near")

하지 않는 것이 가장 좋습니다.이는 이전 코드와의 하위 호환성을 위해 정의되었습니다. 어떻게든 제거하고 나중에 이전 코드 중 일부를 사용해야 한다면 문제가 발생할 수 있습니다.

"near"와 "far"는 그다지 설명적인 변수 이름이 아니라고 주장할 수도 있습니다.충돌을 해결하기 위해 변수 이름에 추가 세부 정보를 제공하는 것을 고려해 보셨나요(예:가장 가까운_일치, 가장 먼_일치).그냥 생각입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top