PC lint/Flexelint规则反对纯炭
PC-lint / Flexelint rule against plain char
Gimpel Software的PC lint和Flexelint有一条规则"971:使用不带"signed"或"unsigned"的"char">,该规则禁止在不指定签名性的情况下使用纯char
类型。
http://www.gimpel.com/html/pub/msg.txt
我认为这是被误导了。如果char
用作整数类型,那么显式指定有符号性可能是有意义的,但当它用于文本字符时则没有意义。像printf
这样的标准库函数采用指向普通char
的指针,而使用signed
或unsigned char
则是类型不匹配。当然,可以在类型之间进行转换,但这可能会导致lint试图防止的那种错误。
这种针对普通char
类型的lint规则是错误的吗?
PC Lint在900-999(对于C++为1900-1999)范围内提供的消息称为"选修笔记",默认情况下为关闭状态。如果您有一个在某些特定方面具有限制性的编码准则,则可以使用它们。然后,您可以激活其中一个或多个注释,以帮助您发现潜在的违规行为。我不认为有人在真正的开发工作中激活了所有的9xx消息。
关于char
,你是对的:它是对真实字符使用字节(几乎总是)。但是,C编译器将char
视为有符号或无符号。对于C++,char
不同于unsigned char
和signed char
。
在我工作过的许多嵌入式C环境中,习惯上有一条编码规则,规定不允许使用纯char
。此时应激活此PC Lint消息。例外情况,如与其他库的接口,必须明确允许,然后使用Lint注释来抑制单个消息。
我认为他们选择强制您选择signed
或unsigned
的原因是因为C标准没有。C标准规定char
、unsigned char
和signed char
是三种独特的类型。
例如,gcc使默认的signed
,但可以使用标志-funsigned-char
进行修改
所以IMO我会说不,规则是肯定的,它只是试图收紧C规范
- 此代码是否违反一个定义规则
- 生成文件不对文件使用隐式规则
- 变量可能尚未初始化[MIRA 2012规则9.1,强制性]
- 静态结构和一个定义规则
- 尽管遵循了规则,内存泄漏在哪里
- 这是关于成员访问规则的正确摘要吗
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 增强精神解析器规则以检测语句中的特殊结尾
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 为什么此指针值不能转换为整数的规则是什么?
- 传递通用函数,用于梯形规则的数值积分
- C++内存模型中的确切规则阻止在获取操作之前重新排序
- 模板如何影响C++中隐式声明的规则?
- antlr 规则上下文是否可以独立于目标
- Bison/flex 在识别规则后等待输入
- 生成文件中隐式规则中的 -c 标志出错
- 单链接列表实现,规则为 3
- 指针算术规则中的"possibly-hypothetical"是什么意思?
- 假设声明中某些上下文中需要的名称查找规则是什么
- PC lint/Flexelint规则反对纯炭