2010-08-12 56 views
3

當提供了錯誤的參數個數的printf():如何在Visual Studio 2005中獲取printf警告?

printf("%s", "foo", "bar"); 

或者通過提供錯誤類型的參數:

printf("%d", "foo"); 

GCC能夠警告這些錯誤:

$ gcc -Wformat printf_too_many_arguments.c 
printf_warnings.c: In function `main': 
printf_warnings.c:5: warning: too many arguments for format 
printf_warnings.c:5: warning: too many arguments for format 

$ gcc -Wformat printf_argument_of_wrong_type.c 
printf_warnings.c: In function `main': 
printf_warnings.c:5: warning: format `%d' expects type `int', but argument 2 has type `char *' 
printf_warnings.c:5: warning: format `%d' expects type `int', but argument 2 has type `char *' 

如何使用Visual Studio 2005獲得這樣的警告?

- dave

+0

gcc編譯器在其中有特殊的代碼,可以「瞭解」printf函數和格式字符串。據我所知,MS編譯器沒有這個。 – 2010-08-12 09:13:34

回答

0

不幸的是MSVC/Visual Studio不支持這個。

__attribute__((format(printf, 1, 2))) for MSVC?

+1

感謝您的信息。 Visual Studio缺乏這種警告非常糟糕。 – user418190 2010-08-12 10:06:35

+0

Visual Studio已經支持了近10年(包括在VS2005中):http://msdn.microsoft.com/en-us/library/ms235402(v=vs.80).aspx,只需傳遞/ analyze標誌即可。 – 2014-08-28 01:28:27

0

看你會需要額外的軟件來做到這一點。看看PC-Lint(http://www.gimpel.com/)。它可以找到這些類型的錯誤(以及更多[潛在]錯誤)。

1

當使用Visual Studio 2005時,我使用cppcheck(http://cppcheck.sourceforge.net/),它檢測提供給printf/wprintf的參數數量與所需參數數量之間的不匹配。

不幸的是,它不檢查類型匹配,但它是一個開始。