unsigned char a, b;
b = something();
a = ~b;
一个静态分析器在最后一行抱怨截断,大概是因为b
在其位被翻转之前被提升为 int 并且结果将是 int 类型。
我只对提升的 int 的最后一个字节感兴趣——如果b
是 0x55,我需要a
是 0xAA。我的问题是,C 规范是否说明了截断是如何发生的,还是实现定义/未定义?是否保证a
将始终获得我期望的值,或者它会在符合标准的平台上出错?
当然,在分配之前强制转换结果会使静态分析器静音,但我想知道首先忽略这个警告是否安全。