Gimpel Software的PC-lint和Flexelint有一个规则“971:使用'char'而没有'signed'或'unsigned'”,禁止使用普通char
类型指定签名。
http://www.gimpel.com/html/pub/msg.txt
我认为这是错误的。如果char
用作整数类型,那么明确指定signedness可能是有意义的,但是当它用于文本字符时则没有意义。标准库函数(如printf
)指向普通char
,使用signed
或unsigned char
是类型不匹配。当然可以在类型之间进行转换,但这可能导致lint试图阻止的那种错误。
这种针对普通char
类型的lint规则是错误的吗?
答案 0 :(得分:3)
PC Lint在900-999(以及1900-1999 for C ++)范围内提供的消息称为“Elective Notes”,默认情况下为off。如果您的编码指南以某种特定方式受到限制,则可以使用它们。然后,您可以激活其中一个或多个注释,以帮助您查找可能的违规行为。我认为没有人在真正的开发工作中激活了所有9xx消息。
你是对的char
:对一个真正的角色使用一个字节(几乎总是)。但是,char
被C编译器视为有符号或无符号。对于C ++,char
与unsigned char
和signed char
不同。
我在其中使用的许多嵌入式C环境习惯上都有一个编码规则,声明不允许使用普通char
。那时应激活此PC Lint消息。必须明确允许例外,例如与其他库接口,然后使用Lint注释来抑制单个消息。
答案 1 :(得分:0)
我认为他们选择强迫您选择signed
或unsigned
的原因是因为C标准没有。 C标准规定char
,unsigned char
和signed char
是三种唯一类型。
gcc使默认signed
,但可以使用标记-funsigned-char
所以IMO我会说不,规则是没有错,它只是试图收紧C规格。