C语言 with -wformat选项的GCC打印警告const unsigned char



测试代码:

#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测试。解释可能包括在哪些段中存储了不同的数据类型,但我很惊讶。

现在是一个残酷的GCC错误,应尽快修复。

btw:引入了2000-09-24。

最新更新