两个 -Wformat 警告(未知的转换类型和格式参数过多)

Two -Wformat warnings (unknown conversion type & too many arguments for format)

提问人:Rodion Iskhakov 提问时间:12/10/2022 最后编辑:chqrlieRodion Iskhakov 更新时间:12/11/2022 访问量:132

问:

#include <stdio.h>

int main()
{
    unsigned long long int the_num = 600851475143;
    
    printf("%llu", the_num);

    return 0;
}

当我尝试编译它时,我收到以下警告:

3.c: In function 'main':
3.c:10:12: warning: unknown conversion type character 'l' in format [-Wformat=]
  printf("%llu", the_num);
            ^
3.c:10:9: warning: too many arguments for format [-Wformat-extra-args]
  printf("%llu", the_num);
         ^~~~~~

也许这只是一个错误或其他什么?..

GCC 版本:

gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)

使用以下命令编译:

gcc -Wall -Wextra -pedantic 3.c

c 长整数 符号 无 符号 long-long-int

评论

2赞 Eric Postpischil 12/10/2022
这不会在当前版本的 GCC、Clang 或 MSVC 中重现。说明您正在使用的编译器版本和用于编译的开关。
0赞 Harith 12/10/2022
我有同样的问题。我使用的 GCC 版本 8 无法识别一些格式说明符。
1赞 Rodion Iskhakov 12/10/2022
@Haris,我很好奇为什么。
1赞 Eric Postpischil 12/10/2022
看起来 MinGW 缺乏支持
1赞 chux - Reinstate Monica 12/10/2022
Rodion Iskhakov,提示:在将常量分配给无符号类型时,最好使用后缀,尤其是当常量很大时。uunsigned long long int the_num = 600851475143u;

答:

2赞 Rodion Iskhakov 12/10/2022 #1

我通过在编译时添加标志来更改语言标准,警告消失了。c99-std=c99

评论

2赞 chqrlie 12/11/2022
该警告具有误导性,应被视为错误。编译器知道类型,只是被指示认为它们不受支持。因此,警告应为:long longwarning: unsigned long long conversion unsupported in current configuration [-Wformat=]