thu*_*ium 3 c c++ gcc warnings
代码是:
*(buf+2) |= (unsigned char)(mFlag & 0x7f);
Run Code Online (Sandbox Code Playgroud)
buf是unsigned char *并且mFlag是unsigned char
我猜是因为返回值operator|=使我收到警告
警告:从“int”转换为“unsigned char”可能会改变其值
我怎样才能消除警告?是因为operator|=吗?
在 C 中,所有算术(包括&)都在至少与 一样宽的类型中完成int。因此,表达式的结果将始终是int或unsigned取决于常量的类型。
由于常量0x7f显然在任何字符类型的范围内,因此您的编译器给出的警告实际上并没有真正的帮助,我什至认为它是一个错误。
你唯一能做的就是
*(buf+2) = (unsigned)*(buf+2) | 0x7FU;
Run Code Online (Sandbox Code Playgroud)
也就是说,将值显式转换为更广泛的类型。如果这仍然给您一个转让人使用的警告
*(buf+2) = (unsigned char)((unsigned)*(buf+2) | 0x7FU);
Run Code Online (Sandbox Code Playgroud)
但是您应该明确考虑升级编译器或更改您使用的警告选项。
| 归档时间: |
|
| 查看次数: |
4582 次 |
| 最近记录: |