What you’ll learn:
- What are MISRA C and MISRA C++?
- Differences between the standards.
MISRA C and MISRA C++ from the MISRA Consortium are programming guidelines for their respective programming languages. They’re designed to improve the software quality by identifying and restricting functionality within the languages
I talked with Andrew Banks, Technical Specialist at TASKING/LDRA, about the differences between the standards (watch the video above).
In general, MISRA C++ is a superset of MISRA C in the same fashion as C++ is a superset of C. There are differences, often ones that only a compiler writer would appreciate, but the differences and issues with the clarity of the C specification impact the rules specified by the consortium. For example,
MISRA C Rule 20 (required): All object and function identifiers shall be declared before use
is something that’s also found in the MISRA C++ specification. Of course, C++ has object-oriented features that aren’t available with C. Thus, a host of rules specific to MISRA C++ are related to things like class and object definitions.
For instance, there’s a rule specifying that all variables are assigned by an operator = definition. C++ also supports resource acquisition is initialization (RAII); the rules recommend its use while discouraging the use of dynamic memory allocation.
Most commercial static-analysis tool implementations support the latest MISRA C/C++ definitions. A number of open-source tools support a limited subset.