-Wconversion简称和char

时间:2014-02-15 05:08:12

标签: c

我在构建选项中添加了-Wconversion。第一个警告是针对此功能的(显然是为了反转字节顺序):

unsigned short reverse(unsigned short val) {
    return (val<<8) | (val>>8);
}

我想我知道这里发生了什么。 val被提升为signed int,目的是为了转换和按位|。然后,需要将其转换回unsigned short

但是,我真的没有一个很好的解决方案。如果促销永远不会发生,原始意图效果最好,但是我没有知道可以阻止它的短片后缀。想法?

1 个答案:

答案 0 :(得分:0)

首先,我建议使用明确指定大小的类型。根据C标准unsigned short是一种小于或等于unsigned int至少 16位的类型。因此,要反转无符号的16位宽整数,您应该使用uint16_t。当你执行左移时,你应该放下上半部分:

#include <stdint.h>
uint16_t reverse(uint16_t _v) {
    return ((uint16_t)((_v & 0xFF) << 8) | (_v >> 8));
}

我的GCC-4.7.2使用-Wall -Wconversion -Werror干净地编译了这个文件。此外,还有htons() and ntohs()