【发布时间】:2016-12-16 08:19:28
【问题描述】:
我在为嵌入式平台调整一段代码时遇到了一些麻烦。
eMBFuncReadCoils( UCHAR * pucFrame, USHORT * usLen )
上面一行是我遇到问题的函数的原型。
问题是关于*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;
但仍然注意到变化。
谢谢
【问题讨论】:
-
*usLen++有同样的问题吗? -
它似乎可以工作,但它给了我另一个错误:错误:未使用计算的值,我同意这一点,因为用 ++ 递增它,只是在该语句中递增它的本地值,递增的值永远不会重新分配给该指针指向的内存位置
-
或尝试“*usLen += (USHORT)1”。您的原始语句采用 int 1,将 usLen 转换为 int,添加它们,然后尝试将它们分配回 short。如果值为 0xffff,则可能有问题。
-
同样的错误 :(,顺便说一句,我找到了一个不太漂亮的解决方案,我对非指针辅助变量进行操作,然后将值分配给取消引用的指针。
-
这是什么编译器,什么架构,顺便说一句?
标签: c type-conversion unsigned