使用-Wconversion进行编译,
uint32_val = 0x00000C00;
uint_8_val = ((uint32_val >> 8) & 0x000000FF);
没有发出警告。
我应该用什么编译器标志来发出警告?
答案 0 :(得分:6)
没有警告,因为表达式:
((uint32_val >> 8) & 0x000000FF)
始终可以转换为适合字节的类型。您的 uint32_val 未投放,但参与计算。编译器可以对此进行优化,在这种情况下很明显,逐位和000000ff
后的结果将始终符合提供的 l-value 类型,因此没有警告。< / p>
答案 1 :(得分:2)
您的代码编译正常。普通常数的类型被确定为最佳拟合。
您将收到有关此代码的警告:
uint32_val = 0x00000C00;
uint_8_val = ((uint32_val >> 8) & 0x000001FF);
编译器不应强制执行编码指南。这是两回事。