2012-04-23 54 views
4

Gcc很好地提供-Wformat來幫助查找與printf相關的錯誤。有什麼辦法可以在MSVC中獲得相同的行爲嗎?具體而言,我希望編譯器對參數進行一些類型的檢查。由於各種原因,我顯然不想使用C++的iostream庫。 (我也不想使用boost格式)。有什麼辦法讓Visual C++(9.0)生成關於printf格式字符串不匹配printf的參數類型的警告?

引述上面的源,基本上-Wformat提供以下功能

檢查調用printf和scanf等,以確保提供參數的適當指定的格式字符串類型,並且在格式字符串中指定的轉換是有意義的。

我可以找到微軟最接近到目前爲止是this warning其涉及使用%d 64 VS 32位版本。

+0

相關,但具體到VS 2005: http://stackoverflow.com/questions/ 3466131/how-to-get-printf-warnings-in-visual-studio-2005 – 2012-04-23 14:07:09

回答

-3

具體而言,我希望編譯器對參數做一些檢查類型 的檢查。

編譯器喜歡在C++代碼中默認進行類型檢查。不幸的是,你正試圖使用​​不提供該功能的C設施。

只要使用IO流,編譯器將做的不僅僅是在類型不匹配時發出警告:它會發出錯誤並且無法完全編譯您的代碼!

+0

我有很好的理由避免Iostreams。主要是因爲我無法容忍他們的表現緩慢,其次,因爲完全在我的團體中,有偏見的意見printf樣式格式的字符串更具可讀性並且更容易處理。我知道我缺少類型安全功能,這就是爲什麼我想要一些警告來彌補這種不足。我們在跟上警告方面做得非常好,所以我覺得這是我團隊需求的最佳折衷。 – 2012-04-23 14:25:50

3

我相信這不是在Visual Studio中支持的功能(我會盡力爲此找到一個引用)。我知道的最接近的是使用_Printf_format_string_SAL annotation

3

不幸的是,在編譯時沒有辦法生成這樣的警告,但VC++代碼分析工具會爲具有不匹配參數的printf-like函數生成警告消息。

有關更多詳細信息,請參見VC++和http://msdn.microsoft.com/en-us/library/vstudio/ms173498.aspx中的/analyze選項。

作爲一個側面說明,人們一直在抱怨這個,也許微軟會在未來做一些事情: https://connect.microsoft.com/VisualStudio/feedback/details/799869/detection-of-format-string-errors-should-be-part-of-the-regular-c-compile-instead-of-analyze

相關問題