我正在將Windows驅動程序項目從VS 2005
遷移到VS 2012
。許多宏重新定義警告是在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'
.....
它編譯罰款sal.h
與2005年VS運,因爲它不具備宏觀__format_string
等。但是,VS 2012中的sal.h
具有這些宏。因此,具有駕駛員sal.h
和標準sal.h
之間的衝突與2012年VS
#define __format_string // With DDK
#define __format_string _Printf_format_string_ // On VS 2012
我不能忽視的標準頭,因爲它們在構建過程中使用。
沒有#if
指示圍繞這些宏在sal.h
這樣我就可以在2012年VS它#undef
有沒有什麼解決有關此問題?
謝謝。
您是否需要在同一個項目中同時使用VS的宏_and_你自己的宏,或者你只是想擺脫警告? – SingerOfTheFall
在任何情況下,它們都是我自己的宏。兩者都來自標準頭文件'sal.h',但來自不同的包含路徑(WinDDK,VS 2012標準包含路徑)。是的,我想擺脫警告,而不是說忽略這個警告。但以更正式的方式,如果存在。 – Mahesh
擺脫警告的更正式方法是在每個宏定義之前添加一個#undef。但是如果未定義的宏未定義,那最終會產生它自己的警告。這樣做是完全合法的,但編譯器編寫者顯然認爲你不夠聰明以至於無法做到這一點。不幸的是,這樣做意味着編輯系統頭文件,有些人不滿。 –