gpt4 book ai didi

从 "USHORT"转换为 'int' 可能会改变它的值

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

我在为嵌入式平台改编一段代码时遇到了一些麻烦。

eMBFuncReadCoils( UCHAR * pucFrame, USHORT * usLen )

上面一行是我遇到问题的函数的原型(prototype)。

问题是关于 *usLen 指针和以下指令:

*usLen += 1;

USHORT定义如下:

typedef unsigned short USHORT; 

编译器说:

error: conversion to 'USHORT' from 'int' may alter its value [-Werror=conversion]
*usLen += 1;

我无法弄清楚可能是什么问题。

为什么它会因为 int 而报错?

我还想像这样重写作业:

*usLen = *usLen + 1;

但仍然注意到变化。

谢谢

最佳答案

我会说编译器选项 ([-Werror=conversion]) 是罪魁祸首。表达式 *usLen += 1; 是那个语法糖:

*usLen = *usLen + 1;

所以你添加了一个unsigned short和一个int。 unsigned short 值被提升为 int(假设 int 可以表示所有 unsigned short 值,这对于所有常见的 32 位和 64 位体系结构都是正确的),并且您最终将 int 分配给 unsigned short ,可以 截断值但由 C 标准完美定义。它通常是对常见选项的警告,但这里的错误表明编译器被特别指示引发错误。

您可以放宽编译器选项,或者如果您有充分的理由,只需使用应该允许的显式转换:

*usLen += (unsigned short) 1;

*usLen = (unsigned short) (*usLen + 1);

关于从 "USHORT"转换为 'int' 可能会改变它的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41180026/

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