gpt4 book ai didi

c - Microchip XC8 警告 "conversion to shorter data type"和 "implicit conversion signed to unsigned"

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:50 33 4
gpt4 key购买 nike

我正在为 PIC18F2420 使用带有 xc8 1.35 编译器的 MPLABX 3.20,我收到了两个我不理解的奇怪警告:

这是生成警告的源代码之一

9  void write(Pin _Pin, char value)
10 {
11 if( value == 1)
12 {
13 (*((_Pin.Reg)+ 5*sizeof(char))) |=(1<<_Pin.Bit);
14 }
15 else
16 {
17 (*((_Pin.Reg)+ 5*sizeof(char))) &= ~(1<<_Pin.Bit);
18 }
19 }

这是我使用的结构引脚:

typedef unsigned char *SFR;

typedef struct
{
SFR Reg;
unsigned char Bit;
SFR ReadReg;

}Pin;

此代码用于提供一种使用引脚的简单方法

我有以下警告:

Pin.c:13: 警告:(373) 隐式有符号到无符号的转换

Pin.c:17: 警告:(373) 隐式有符号到无符号的转换

...

Pin.c:17: 警告:(752) 转换为更短的数据类型

这两个值都是 unsigned char 那么为什么我有这些警告?

最佳答案

the both values are unsigned char so why do i have these warnings ?

一个对您自己有帮助的方法是:假设您错了。你哪里错了?显然,由于您收到了警告,因此这些值不能是无符号的。

现在让我们来分析一下为什么它们可能不是未签名的。 _Pin.Bit是无符号值。但是我们不使用它。我们在一个整数表达式中使用它,其类型是 - 好吧 - 只是 int :

表达式(1<<_Pin.Bit)类型为 int .

表达式~(1<<_Pin.Bit)类型为 int此外,您在转换为 unsigned char 时丢弃了它的非零符号位,从而在第 17 行提示第二个警告。

关于c - Microchip XC8 警告 "conversion to shorter data type"和 "implicit conversion signed to unsigned",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36750166/

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