带有-Wformat选项的gcc打印const unsigned char的警告

时间:2018-02-06 16:26:30

标签: c gcc compiler-warnings

测试代码:

#include <stdio.h>

int main(int argc, char **argv) {

    char buf[10];

    char c[] = "%i";
    unsigned char uc[] = "%i";
    const char cc[] = "%i";
    const unsigned char cuc[] = "%i";
    const unsigned char *cucp = "%i";

    sprintf(buf, (char *)c, 1);
    sprintf(buf, (char *)uc, 1);
    sprintf(buf, (char *)cc, 1);
    sprintf(buf, (char *)cuc, 1);
    sprintf(buf, (char *)cucp, 1);

    return 0;
}

编译:

gcc -Wformat -o test test.c
test.c: In function ‘main’:
test.c:16:26: warning: format is a wide character string [-Wformat=]
    sprintf(buf, (char *)cuc, 1);
                         ^
  

为什么我会收到 const unsigned char 的警告,而不是其他类型的警告?

使用gcc 5.4.0和一些交叉gcc 4.3.2进行测试。 解释可能包括存储不同数据类型的段,但我很惊讶。

1 个答案:

答案 0 :(得分:1)

它现在是一个受限制的gcc bug,应尽快解决。

BTW:它是在2000-09-24推出的。