0

Gimpel Software 的 PC-lint 和 Flexelint 有一条规则"971: Use of 'char' without 'signed' or 'unsigned'",禁止使用char没有指定签名的普通类型。

http://www.gimpel.com/html/pub/msg.txt

我认为这是误导。如果char用作整数类型,那么显式指定签名可能是有意义的,但在用于文本字符时则不然。标准库函数,例如printf将指针指向 plain char,并使用signedorunsigned char是类型不匹配。当然可以在类型之间进行转换,但这可能会导致 lint 试图防止的那种错误。

这个针对普通char类型的 lint 规则是错误的吗?

4

2 回答 2

3

PC Lint 在 900-999(对于 C++ 为 1900-1999)范围内提供的消息称为“选修笔记”,默认情况下是关闭的。如果您有以某种特定方式限制的编码指南,则可以使用它们。然后,您可以激活这些注释中的一个或多个,以帮助您发现潜在的违规行为。我认为没有人在真正的开发工作中激活了所有 9xx 消息。

你是对的char:它是一个字节(几乎总是)用于一个真正的字符。但是,achar被 C 编译器视为有符号或无符号。对于 C++,char与两者unsigned charsigned char.

在我工作过的许多嵌入式 C 环境中,习惯上都有一个编码规则,说明char不允许使用纯文本。那时应该激活此 PC Lint 消息。异常,如与其他库的接口,必须明确允许,然后使用 Lint 注释来抑制单个消息。

于 2012-11-29T05:26:54.447 回答
0

我会假设他们选择强迫您选择的原因signed或者unsigned是因为 C 标准没有。C 标准规定charunsigned charsigned char是三种独特的类型。

例如,gcc 设为默认值signed,但可以使用标志进行修改 -funsigned-char

所以 IMO 我会说不,它的规则没有错,它只是试图收紧 C 规范。

于 2012-09-20T17:14:41.143 回答