当uint32使用gcc C转换为uint8时,为什么没有警告

时间:2013-12-03 15:58:16

标签: c gcc type-conversion implicit-conversion gcc-warning

使用-Wconversion进行编译,

uint32_val = 0x00000C00;
uint_8_val = ((uint32_val >> 8) & 0x000000FF);

没有发出警告。

我应该用什么编译器标志来发出警告?

2 个答案:

答案 0 :(得分:6)

没有警告,因为表达式

((uint32_val >> 8) & 0x000000FF)

始终可以转换为适合字节的类型。您的 uint32_val 未投放,但参与计算。编译器可以对此进行优化,在这种情况下很明显,逐位和000000ff后的结果将始终符合提供的 l-value 类型,因此没有警告。< / p>

答案 1 :(得分:2)

您的代码编译正常。普通常数的类型被确定为最佳拟合。

您将收到有关此代码的警告:

uint32_val = 0x00000C00;
uint_8_val = ((uint32_val >> 8) & 0x000001FF);

编译器不应强制执行编码指南。这是两回事。