27-11-2019, 09:54 AM
This response assumes an 8-bit char, 16-bit short and 32-bit int.
The essential type for bit-fields is explained in appendix D.4. It is the smallest standard type which is able to represent all possible values of the bit-field.
Therefore the essential type for test.a is "unsigned char".
The essential type of "(unsigned int)THREE" is "unsigned int" as the cast operation is not listed in Appendix D.7.
There is therefore a "narrower conversion" from "unsigned int" to "unsigned char" and hence a violation of rule 10.3.
The following would be valid with this rule:
The essential type for bit-fields is explained in appendix D.4. It is the smallest standard type which is able to represent all possible values of the bit-field.
Therefore the essential type for test.a is "unsigned char".
The essential type of "(unsigned int)THREE" is "unsigned int" as the cast operation is not listed in Appendix D.7.
There is therefore a "narrower conversion" from "unsigned int" to "unsigned char" and hence a violation of rule 10.3.
The following would be valid with this rule:
Code:
test.a = (unsigned char)THREE;
Posted by and on behalf of the MISRA C Working Group