Domanda

Compiling with -Wconversion,

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

gives no warning.

What compiler flag shall I use to get a warning?

È stato utile?

Soluzione

There is no warning because the expression:

((uint32_val >> 8) & 0x000000FF)

is always convertible to a type that fits in a byte. Your uint32_val is not cast, but takes part in a calculation. The compiler can optimize this, and in this case it is clear the result after bit-wise and-ing with 000000ff will always fit the provided l-value type, hence no warning.

Altri suggerimenti

Your code will compile fine. The type of plain constants is determined to be the best fitting.

You will get warning for this code:

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

Compilers shouldn't enforce coding guidelines. That's two different thing.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top