Gimpel软件的PC-lint和Flexelint有一个规则"971:使用'char‘而没有’签名‘或’unsigned‘,禁止使用普通的char类型而不指定签名。
http://www.gimpel.com/html/pub/msg.txt
我认为这是误导。如果char被用作整数类型,那么显式地指定签名可能是有意义的,但是当它用于文本字符时就没有意义了。像printf这样的标准库函数使用指向普通char的指针,而使用signed或unsigned char是一种类型不匹配。当然,可以在类型之间进行转换,但这可能会导致林特试图防止的错误。
这条针对普通char类型的林特规则是否错误?
发布于 2012-11-29 05:26:54
PC在900-999 (和1900-1999用于C++)范围内提供的消息称为“选择注释”,默认情况下为off。如果您有某种特定方式的限制性编码指南,它们将用于使用。然后,您可以激活这些注释中的一个或多个来帮助您发现潜在的违规行为。我认为没有人在真正的开发工作中激活了所有的9xx消息。
关于char,您是正确的:它是使用一个字节(几乎总是)来实现一个真正的字符。但是,C编译器将char视为有符号或无符号的。对于C++,char与unsigned char和signed char都不同。
我曾在许多嵌入式C环境中工作过,习惯上有一条编码规则,说明不允许使用普通的char。这时,这个PC Lint消息应该被激活。异常,就像与其他库的接口一样,必须被显式地允许,然后使用Lint注释来抑制单个消息。
发布于 2012-09-20 17:14:41
我认为他们选择强制您选择signed或unsigned的原因是因为C标准没有。C标准状态char、unsigned char和signed char是三种独特的类型。
例如,gcc制作默认的signed,但是可以用标志-funsigned-char修改它。
因此,我会说不,规则是没有错的,它只是试图收紧C规格。
https://stackoverflow.com/questions/12517388
复制相似问题