【发布时间】:2014-10-15 05:50:39
【问题描述】:
我正在使用 PCLint v 9.00h
在我的代码中,我有以下内容(其中 S16 是有符号的 16 位):
S16 temperatureResult = -32768;
除非我的大脑停止工作,否则这是适合这种类型的最小值
但我收到“违反 MISRA 2004 所需规则 10.1,将整数隐式转换为更小的类型”的 lint 错误
如果我将值更改为 -32767,它可以正常工作。
我是否遗漏了一些明显的东西?
【问题讨论】:
-
如果我错了,请纠正我,但是 c99 TC3 不是说它是实现定义的,它们可能提供 + 和 - 值 0?因此,如果是这种情况,您将少 1 个负十进制值。
-
使用非标准类型的原因是什么?如果你的编译器是 C99,你应该有
int16_t和INT16_MIN可以开箱即用。 -
@JensGustedt 这是一个由 MISRA 要求主导的编码标准要求,已经有一段时间没有更新了。不知道编译器是不是C99
-
那个 MISRA 规则很奇怪。 Gcc(可能还有许多其他编译器)可以警告常量表达式的非值保留转换。演员隐藏了可能的错误;如果值更改为 -32769,编译器警告可能会有所帮助。
标签: c