Why does the following code produce a C192: '=': value truncated error? They are all uint8_t's. Structure definition shown below. What is there to truncate, all variables are of the exact same type! The result is correct but I am just interested in why.
msg.DataBuffer[7] = msg.DataBuffer[0] ^ msg.DataBuffer[1] ^ msg.DataBuffer[6];
typedef struct { uint16_t CANID; uint8_t DataBuffer[8]; uint8_t DataSize; } CAN_MESSAGE;
I still don't understand why there is an intermediate result (probably of type int) that is not of type unsigned char.
Because the language is defined that way.
But when there is only two things being xord there is no promotion?
Not quite. There is always promotion. There is just no warning about it in that case.