gcc -Wconversion
在没有显式(丑陋)强制转换的情况下,如何删除以下代码所产生的警告:
int main()
{
int val;
unsigned char c1 = (val % 65536) / 256;
unsigned char c2 = (val % 65536) % 256;
}
有没有一种方法可以告诉编译器,显然转换是在(% 65536) / 256
或期间隐式完成的% 256
以供参考
$ gcc -Wconversion w.c
w.c: In function ‘main’:
w.c:4:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
w.c:5:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
听起来您想要这些结果:
c1 = (val >> 8) & 0xff;
c2 = val & 0xff;
编辑:
从gcc Wiki: Wconversion
警告可能会更改值的隐式转换。这包括实数和整数之间的转换,例如x为双精度时的abs(x);有符号和无符号之间的转换,例如unsigned ui = -1; 并转换为较小的类型,例如sqrtf(M_PI)。不要警告像abs((int)x)和ui =(unsigned)-1之类的显式强制类型转换,或者如果像abs(2.0)中那样转换未更改该值,则不要发出警告。可以使用-Wno-sign-conversion禁用有关有符号和无符号整数之间转换的警告。对于C ++,还警告在NULL和非指针类型之间进行转换。用于用户定义的转换的令人困惑的重载解析;以及永远不会使用类型转换运算符的转换:转换为void,相同类型,基类或对其的引用。
如果val为,则不会发生警告,unsigned
但是您必须确定要为负值得到的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句