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
지침은 모든 작업이 문제에 대한 주위가있다 없다?
감사합니다. 난 당신이 정확하게 원하는 것을 이해
동일한 프로젝트에서 VS '매크로와 자신의 매크로를 모두 사용해야합니까, 아니면 경고를 없애고 싶습니까? – SingerOfTheFall
두 경우 모두 내 매크로가 아닙니다. 둘 다 표준 헤더'sal.h '에서 왔지만 다른 포함 경로 (WinDDK, VS 2012 표준 포함 경로)에서 왔습니다. 그리고 예, 나는이 경고를 무시하지 말고 경고를 없애고 싶습니다. 그러나 더 공식적인 방법으로, 존재한다면. – Mahesh
경고를 제거하는 더 공식적인 방법은 각 매크로 정의 앞에 #undef를 추가하는 것입니다. 그러나 매크로가 undef'd가 정의되지 않은 경우 자체 경고를 생성하게됩니다. 그렇게하는 것이 합법적이지만, 컴파일러 작성자는 분명히 당신이 그것을 할 의도가있는만큼 똑똑하지 않다고 판단합니다. 불행히도, 그렇게하는 것은 시스템 헤더를 편집하는 것을 의미합니다. –