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

tem*_*emp 7 c gcc type-conversion gcc-warning implicit-conversion

使用-Wconversion进行编译,

uint32_val = 0x00000C00;
uint_8_val = ((uint32_val >> 8) & 0x000000FF);
Run Code Online (Sandbox Code Playgroud)

没有警告.

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

DNT*_*DNT 6

没有警告,因为表达式:

((uint32_val >> 8) & 0x000000FF)
Run Code Online (Sandbox Code Playgroud)

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