2012-09-20 96 views
0

我正在將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有沒有什麼解決有關此問題?

謝謝。

+0

您是否需要在同一個項目中同時使用VS的宏_and_你自己的宏,或者你只是想擺脫警告? – SingerOfTheFall

+0

在任何情況下,它們都是我自己的宏。兩者都來自標準頭文件'sal.h',但來自不同的包含路徑(WinDDK,VS 2012標準包含路徑)。是的,我想擺脫警告,而不是說忽略這個警告。但以更正式的方式,如果存在。 – Mahesh

+1

擺脫警告的更正式方法是在每個宏定義之前添加一個#undef。但是如果未定義的宏未定義,那最終會產生它自己的警告。這樣做是完全合法的,但編譯器編寫者顯然認爲你不夠聰明以至於無法做到這一點。不幸的是,這樣做意味着編輯系統頭文件,有些人不滿。 –

回答

2

那麼,如果我理解你想要正確的東西,所有你需要做的是重新定義了前加

#ifdef __format_string 
#undef __format_string 
#endif 

+1

正確。但是至少有50個來自標準頭文件的宏重新定義警告。這使我可以修改標準頭文件。我正在查看是否有任何包含路徑調整來擺脫這些警告。修改標準頭文件是最後的手段,我不喜歡:) – Mahesh

+0

@Mahesh,你可以將所有宏的'#undef's添加到一個特殊的頭文件中,並且在#包括標準標題。至少你必須每次只寫一行。 – SingerOfTheFall

+0

感謝您的想法。 – Mahesh

2

您不應該將VS標準頭文件包含在驅動程序代碼中,它們不適合內核使用。僅使用WDK標題。