gpt4 book ai didi

c - -32768 不适合 16 位有符号值

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:14 25 4
gpt4 key购买 nike

我正在使用 PCLint v 9.00h

在我的代码中有以下内容(其中 S16 是有符号的 16 位):

S16 temperatureResult = -32768;

除非我的大脑停止工作,否则这是适合这种类型的最小值

但我收到“违反 MISRA 2004 要求规则 10.1,将整数隐式转换为较小类型”的 lint 错误

如果我将值更改为 -32767,它可以正常工作。

我是否漏掉了一些明显的东西?

最佳答案

不一定是“不适合”。很可能它适合。 (你真的检查了吗?)

  • 如果您的平台使用 32 位(或更大)int,则所有算术表达式都以 32 位 int 类型求值,并且警告只是告诉您正在将 int 值转换为较小的类型。 PCLint 根本不去检查实际值是否适合目标类型。

    您可以通过显式类型转换来抑制此警告

    S16 temperatureResult = (S16) -32768;
  • 如果您的平台使用 16 位 int,那么这里可能会涉及一个稍微不同的问题。在 C 语言中 -32768 不是原子常量。 -32768 实际上是一个表达式,由应用于正常量 32768 的一元 - 运算符组成。 32768 是一个不适合 16 位类型的正常量,因此编译器使用更大的类型(可能是 32 位 long int)来表示 32768。因此,-32768 在更大类型的域中进行评估,并且最终也作为更大类型的值结束。 PCLind 决定警告您隐式切换到更大的类型。 (有关详细信息,请参阅 (-2147483648> 0) returns true in C++?。)

    如果这是这里发生的情况,那么为了避免警告,您可以使用显式类型转换

    S16 temperatureResult = (S16) -32768;

    或者,您可以将初始化表示为

    S16 temperatureResult = -32767 - 1;

    在后一种情况下,编译器应该能够计算 16 位 int 类型域内的常量表达式。

关于c - -32768 不适合 16 位有符号值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26375337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com