2012-09-20 6 views
0

Windows 드라이버 프로젝트를 VS 2005에서 VS 2012으로 마이그레이션하려고합니다.매크로 재정의 경고

.... 

1>C:\WINDDK\7600.16385.1\inc\api\sal.h(707): warning C4005: '__format_string' : 
                   macro redefinition 
1>   c:\program files (x86)\microsoft visual studio 11.0\vc\include\sal.h(2860) : 
             see previous definition of '__format_string' 

..... 

가 IT 매크로 __format_string 등이 없기 때문에 VS 2005과 함께 제공 sal.h 괜찮 컴파일 한 - 많은 매크로 재정의 경고처럼 VS 2012에 생성됩니다. 그러나 VS 2012와 함께 제공되는 sal.h에는 이러한 매크로가 있습니다. 따라서 그들은 빌드 프로세스에서 사용되기 때문에 나는 표준 헤더를 무시할 수

#define __format_string       // With DDK 
#define __format_string _Printf_format_string_ // On VS 2012 

VS 2012와 운전자의 sal.h 표준 sal.h 간의 충돌을 가지고.

.... 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\string.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\crtdefs.h 
.... 

내가 VS 2012 년을 #undef 수 있도록 sal.h에서이 매크로 주위에 #if 지침은 모든 작업이 문제에 대한 주위가있다 없다?

감사합니다. 난 당신이 정확하게 원하는 것을 이해

+0

동일한 프로젝트에서 VS '매크로와 자신의 매크로를 모두 사용해야합니까, 아니면 경고를 없애고 싶습니까? – SingerOfTheFall

+0

두 경우 모두 내 매크로가 아닙니다. 둘 다 표준 헤더'sal.h '에서 왔지만 다른 포함 경로 (WinDDK, VS 2012 표준 포함 경로)에서 왔습니다. 그리고 예, 나는이 경고를 무시하지 말고 경고를 없애고 싶습니다. 그러나 더 공식적인 방법으로, 존재한다면. – Mahesh

+1

경고를 제거하는 더 공식적인 방법은 각 매크로 정의 앞에 #undef를 추가하는 것입니다. 그러나 매크로가 undef'd가 정의되지 않은 경우 자체 경고를 생성하게됩니다. 그렇게하는 것이 합법적이지만, 컴파일러 작성자는 분명히 당신이 그것을 할 의도가있는만큼 똑똑하지 않다고 판단합니다. 불행히도, 그렇게하는 것은 시스템 헤더를 편집하는 것을 의미합니다. –

답변

2

글쎄, 당신이 오직 할 필요가있는 재정의하기 전에

#ifdef __format_string 
#undef __format_string 
#endif 

를 추가합니다.

+1

올바른. 그러나 표준 헤더에서 오는 매크로 재정의 경고가 적어도 50 개 있습니다. 표준 헤더를 수정하게되었습니다. 이 경고를 없애기 위해 포함 경로 조정이 있는지 찾고있었습니다. 표준 헤더를 수정하는 것이 최후의 수단입니다. 어쨌든 맘에 들지 않습니다. – Mahesh

+0

@Mahesh, 모든 매크로에 대해'# undef'를 하나의 특별한 헤더에 추가 할 수 있습니다.'#include' 표준 헤더 포함 ". 적어도 매번 한 줄만 써야합니다. – SingerOfTheFall

+0

아이디어를 제공해 주셔서 감사합니다. – Mahesh

2

드라이버 코드에 VS 표준 헤더를 포함하면 안되며 커널 용도가 아닙니다. WDK 헤더 만 사용하십시오.