C 类型匹配错误-为什么?

C 类型匹配错误-为什么?,c,gcc,gdb,C,Gcc,Gdb,我从gcc得到以下警告: labs.c:760:2: error: array subscript has type ‘char’ [-Werror=char-subscripts] wrbuf[cmdlen++]=(unsigned char)(basictoken[from]>>8); ^ cc1: all warnings being treated as errors 使用gdb进行调试时,它会报告相似类型的两侧: 760 wrbuf[cmdlen++]=(unsi

我从gcc得到以下警告:

labs.c:760:2: error: array subscript has type ‘char’ [-Werror=char-subscripts]
  wrbuf[cmdlen++]=(unsigned char)(basictoken[from]>>8);
  ^
cc1: all warnings being treated as errors
使用gdb进行调试时,它会报告相似类型的两侧:

760 wrbuf[cmdlen++]=(unsigned char)(token[from]>>8);
(gdb) whatis wrbuf[cmdlen]
type = unsigned char
(gdb) whatis (unsigned char)(token[from]>>8)
type = unsigned char
为什么会有这样的警告? 这让我感到不安,因为如果我想为ctypes提供可用的格式,警告就会变成错误

error: array subscript has type ‘char'
它告诉您有关数组下标
cmdlen
或来自的


如何定义
cmdlen
from
?其中一个是字符吗?我怀疑是这样的…

cmdle是char,from是intwell,将cmdlen更改为int解决了这个问题。然而,我有点惊讶,为什么必须对几个字节长的数组使用整数:(无论如何,谢谢你的帮助。是的,我同意。向StackOverflow询问背后的rational是个好问题。可能是因为在某些情况下,编译器不知道数组的大小,而使用字符作为索引是有问题的,因为它的范围。但是,我不知道……让我们看看他们怎么说。。。