the question is: how do you define "compatible types"?
-if we think it is similar to MISRA-C:2004 8.4 "If objects or functions are declared more than once their types shall be compatible."
or to MISRA-C:2012 8.3 that says "Compatible versions of the same basic type may be used interchangeably. For example, int, signed and signed int are all equivalent."
=> then we can look at the definition of compatible types defined in C norm (sections 126.96.36.199, 6.5.2, 6.5.3 and 6.5.4 for C90)
-but C++ norm does not define those compatible types and even more, it says in the Annex C.1 3.9(5)
so what are compatible types in C++? do you use C compatible types even if C++ norm rejects them?Change: C allows “compatible types” in several places, C++ does not
do you use another definition?
Practical example: on the example given in MISRA-C++ documentation
Code: Select all
// File a.cpp extern int32_t a; // File b.cpp extern int64_t a; // Non-compliant – not compatible
-or can we consider that
- it can be compliant on platform where int32_t and int64_t have same signess and size
- it can be non-compliant on platforms where size are different