使用printf格式说明符生成错误符号的警告

Bri*_*ont 3 c gcc-warning

有没有办法让gcc或clang为printf()格式说明符生成带有符号和无符号变量不匹配的警告?

我知道使用-Wformat,但是如果数据类型的大小不正确,则仅报告警告.如果只有标志不正确,它不会生成警告.

例如,即使与签名的unsigned int打印不匹配,以下内容也不会生成警告:

uint32_t x = UINT_MAX;
printf("%d", x);
Run Code Online (Sandbox Code Playgroud)

这将打印出-1.

看起来这将是一个有用的警告,但我没有找到任何方法来启用它.

250*_*501 5

使用:-Wformat连同-Wformat-signedness(-Wformat必须存在).

如果参数的printf说明符的签名不正确,后一个警告选项将发出警告.

gcc 6.2将产生此警告:警告:格式'%d'需要类型为'int'的参数,但参数2的类型为'uint32_t {aka unsigned int}'[ - Wformat =]

uint32_t x = UINT_MAX;应该是uint32_t x = UINT32_MAX;