unsigned char a, b;
b = something();
a = ~b;
一个静态分析器在最后一行抱怨截断,可能是因为b
在其位被翻转之前被提升为int,结果将是int类型。将int截断为char - 是否定义?
我只对提升int的最后一个字节感兴趣 - 如果b
是0x55,我需要a
为0xAA。我的问题是,C规范是否会说明截断是如何发生的,还是实现定义/未定义?是否保证a
将始终得到我预期的价值或在符合的平台上可能出错?
当然,在分配之前转换结果会使静态分析器无声,但是我想知道是否可以安全地忽略此警告。
我会说这是一个虚假的警告。我刚刚通过铛静态分析器运行你的代码,它没有抱怨。什么是'something()'的返回类型 – JeremyP 2011-05-04 10:51:51
@Jeremy这是一个示例代码来说明这种情况。真正的代码就像'mask1 [0] =〜mask2 [0];'两者都是unsigned char类型的数组。显然,我的静态分析器没有叮当声那么聪明:) – Amarghosh 2011-05-04 10:55:44