2012-08-07 2 views
1

나는 여기에 절대적으로 열매 맺을거야. 내가 Windows에서 일부 C++ 개발을하고있어 나는 '인터페이스'라는 이름의 네임 스페이스가 있습니다 그러나win32 '인터페이스'매크로를 비활성화하는 방법은 무엇입니까?

namespace gd { 
namespace interface { 

}} // end namespace 

을, 나는 "있는 Windows.h를 포함하는 경우에 상관없이 포함됩니다"OBJBASE.H "라는 이름의 파일이있다 "또는"Wtypes.h ", 이는 'interface'라는 매크로를 포함합니다. 이 매크로는 네임 스페이스 이름을 사용할 수 없습니다. Win32 API에 인터페이스 매크로의 정의를 비활성화하는 기능이 있습니까? 그렇지 않다면, 내 코드 기반에 너무 많은 대량 변경을 요구하지 않고, 누군가가 그것을 불가능하게하는 영리한 해결 방법을 생각할 수 있습니까?

+3

'#undef interface'? – delnan

+0

@delnan 필자는 저를 위해 포함하는 wrapper include를 생각해 냈습니다. 그러나 내 코드 (라이브러리) 외부의 누군가 windows.h를 직접 사용하면 같은 문제가 발생합니다. 일부 전처리 기 정의로 API 수준에서 사용 중지하는 것이 훨씬 쉬울 것입니다. –

답변

9

이 작업을 실제로 수행하려는 경우 #undefinterface 매크로를 사용할 수 있습니다.

interfaceinterface은 실제로 예약어가 아니기 때문에 예약어에 가깝기 때문에 네임 스페이스 이름을 지정하지 않는 것이 좋습니다. 그것은 네임 스페이스를 사용하는 데 많은 혼란을 야기 할 것입니다.

+0

감사합니다. 네임 스페이스의 이름을 변경했습니다. –

0

windows.h을 포함 할 때 objbase.h이 입력되지 않도록 WIN32_LEAN_AND_MEAN을 정의 할 수도 있습니다.

관련 문제