https://en.wikipedia.org/wiki/MISRA_C Jump to content [ ] Main menu Main menu move to sidebar hide Navigation * Main page * Contents * Current events * Random article * About Wikipedia * Contact us * Donate Contribute * Help * Learn to edit * Community portal * Recent changes * Upload file Languages Language links are at the top of the page across from the title. [wikipe] Wikipedia The Free Encyclopedia Search [ ] Search * Create account * Log in [ ] Personal tools * Create account * Log in Pages for logged out editors learn more * Contributions * Talk Contents move to sidebar hide * (Top) * 1History * 2Adoption * 3Guideline classification and categorization Toggle Guideline classification and categorization subsection + 3.1Classification + 3.2Categorization + 3.3Scope + 3.4Decidability * 4Achieving compliance Toggle Achieving compliance subsection + 4.1MISRA compliance + 4.2Compliance + 4.3Deviations * 5Published documents Toggle Published documents subsection + 5.1MISRA C:1998 + 5.2MISRA C:2004 + 5.3MISRA C:2012 o 5.3.1Main document o 5.3.2Amendment 1 o 5.3.3Amendment 2 o 5.3.4Supporting documents * 6Example suite * 7Tools * 8Criticism * 9See also * 10References * 11External links [ ] Toggle the table of contents MISRA C [ ] 15 languages * l`rby@ * Catala * Cestina * Deutsch * Espanol * Francais * hangugeo * Italiano * `bryt * Ri Ben Yu * Polski * Portugues * Russkii * Slovencina * Zhong Wen Edit links * Article * Talk [ ] English * Read * Edit * View history [ ] Tools Tools move to sidebar hide Actions * Read * Edit * View history General * What links here * Related changes * Upload file * Special pages * Permanent link * Page information * Cite this page * Get shortened URL * Wikidata item Print/export * Download as PDF * Printable version From Wikipedia, the free encyclopedia Software development standard for the C programming language MISRA C is a set of software development guidelines for the C programming language developed by The MISRA Consortium. Its aims are to facilitate code safety, security, portability and reliability in the context of embedded systems, specifically those systems programmed in ISO C / C90 / C99.^[1] There is also a set of guidelines for MISRA C++ not covered by this article. History[edit] * Draft: 1997^[2] * First edition: 1998 (rules, required/advisory) * Second edition: 2004 (rules, required/advisory) * Third edition: 2012 (directives; rules, Decidable/Undecidable) * MISRA compliance: 2016, updated 2020 For the first two editions of MISRA-C (1998 and 2004) all Guidelines were considered as Rules. With the publication of MISRA C:2012 a new category of Guideline was introduced - the Directive whose compliance is more open to interpretation, or relates to process or procedural matters. Adoption[edit] Although originally specifically targeted at the automotive industry, MISRA C has evolved as a widely accepted model for best practices by leading developers in sectors including automotive, aerospace, telecom, medical devices, defense, railway, and others. For example: * The Joint Strike Fighter project C++ Coding Standards^[3] are based on MISRA-C:1998. * The NASA Jet Propulsion Laboratory C Coding Standards^[4] are based on MISRA-C:2004. * ISO 26262 Functional Safety - Road Vehicles cites MISRA C as being an appropriate sub-set of the C language: + ISO 26262-6:2011 Part 6: Product development at the software level^[5] cites MISRA-C:2004 and MISRA AC AGC. + ISO 26262-6:2018 Part 6: Product development at the software level^[6] cites MISRA C:2012. * The AUTOSAR General Software Specification (SRS_BSW_00007) likewise cites MISRA C: + The AUTOSAR 4.2 General Software Specification^[7] requires that If the BSW Module implementation is written in C language, then it shall conform to the MISRA C:2004 Standard. + The AUTOSAR 4.3 General Software Specification^[8] requires that If the BSW Module implementation is written in C language, then it shall conform to the MISRA C:2012 Standard. Guideline classification and categorization[edit] When a new software project is started, the latest MISRA standard should be used. Previous standards are still available for use with legacy software projects that need to refer to it.^[9] Classification[edit] Each Guideline is classified^[10] as Mandatory (new for MISRA C:2012), Required or Advisory. Furthermore, the MISRA Compliance document permits Advisory guidelines to be Disapplied. * Mandatory guidelines shall always be complied with * Required guidelines shall be complied with, unless subject to a Deviation * Advisory guidelines are considered good practice, but compliance is less formal. Categorization[edit] The rules can be divided logically into a number of categories: * Avoiding possible compiler differences, for example, the size of C's int type may vary but int16_t (standardized in C99) is always 16 bits. * Avoiding using functions and constructs that are prone to failure, for example, malloc may fail. * Produce maintainable and debuggable code, for example, naming conventions and commenting. * Best practice rules. * Complexity limits. Scope[edit] MISRA C:2012 separately classifies each guideline as either Single Translation Unit or System.^[10] Decidability[edit] MISRA C:2012 classifies the rules (but not the directives) as Decidable or Undecidable. Achieving compliance[edit] MISRA compliance[edit] MISRA published documents to provide additional guidance to understand and achieve MISRA compliance. * MISRA Compliance:2016, was released by MISRA in April 2016.^[11] * MISRA Compliance:2020, revised edition, was released in February 2020.^[12] Compliance[edit] In order for a piece of software to claim to be compliant to the MISRA C Guidelines, all mandatory rules shall be met and all required rules and directives shall either be met or subject to a formal deviation. Advisory rules may be disapplied without a formal deviation, but this should still be recorded in the project documentation. Note: For compliance purposes, there is no distinction between rules and directives. Deviations[edit] Many MISRA C rules can be characterized as guidelines because under certain condition software engineers may deviate from rules and still be considered compliant with the standard. Deviations must be documented either in the code or in a file. In addition; proof must be provided that the software engineer has considered the safety of the system and that deviating from the rule will not have a negative impact, requirements for deviations also include: * The rule deviated from. * Rationale for deviation.^[13] Published documents[edit] MISRA C:1998[edit] The first edition of MISRA C, "Guidelines for the use of the C language in vehicle based software", which was published in 1998 and is officially known as MISRA-C:1998.^[14] MISRA-C:1998 has 127 rules, of which 93 are required and 34 are advisory; the rules are numbered in sequence from 1 to 127. MISRA C:2004[edit] In 2004, a second edition "Guidelines for the use of the C language in critical systems", or MISRA-C:2004 was produced, with many substantial changes to the guidelines, including a complete renumbering of the rules. MISRA-C:2004 contains 142 rules, of which 122 are "required" and 20 are "advisory"; they are divided into 21 topical categories, from "Environment" to "Run-time failures". MISRA C:2012[edit] Main document[edit] In 2013, the third edition, MISRA C:2012, was published. MISRA C:2012 extends support to the C99 version of the C language (while maintaining guidelines for C90), in addition to including a number of improvements that can reduce the cost and complexity of compliance, whilst aiding consistent, safe use of C in critical systems.^[15] MISRA-C:2012 contains 143 rules and 16 "directives" (that is, rules whose compliance is more open to interpretation, or relates to process or procedural matters); each of which is classified as mandatory, required, or advisory. They are separately classified as either Single Translation Unit or System. Additionally, the rules are classified as Decidable or Undecidable. Amendment 1[edit] In April 2016, MISRA published (as a free download) MISRA C:2012 - Amendment 1: Additional Security Guidelines^[16] which added fourteen new security guidelines. Amendment 2[edit] In February 2020, MISRA published (as a free download) MISRA C:2012 - Amendment 2: Updates for ISO/IEC 9899:2011/18 Core functionality^[17] which adds mapping for the undefined, unspecified and implementation defined behaviours within C11/C18. Supporting documents[edit] MISRA have published the following addenda to support MISRA C:2012: * MISRA C:2012 - Addendum 1: Rule Mappings,^[18] which contains bi-directional rule mappings between MISRA C:2004 and the new version. It is intended to assist users in migration. * MISRA C:2012 - Addendum 2: Coverage of MISRA C:2012 against ISO/ IEC TS 17961:2013 "C Secure"^[19] * MISRA C:2012 - Addendum 3: Coverage of MISRA C:2012 against CERT C^[20] Example suite[edit] An exemplar suite (for MISRA-C:2004 and MISRA C:2012) is available from the MISRA GitLab^[21] repository (login required). This allows tool-users to evaluate and compare the checking support provided by the various MISRA tools; additionally, it gives tool-implementers some guidance as to the intent of the MISRA Guidelines. Tools[edit] See also: List of tools for static code analysis While there exist many software tools that claim to check code for "MISRA conformance", there is no MISRA certification process.^[22] Most of the guidelines can be checked using tools that perform static code analysis. The remaining guidelines require the use of dynamic code analysis. Tools that check code for MISRA conformance include: * Astree by AbsInt * Axivion Bauhaus Suite by Axivion GmbH. MISRA C:2004, C:2012, C:2012 Amendment 1, C++:2008, Compliance:2016. * CodeSonar by GrammaTech * Coverity by Synopsys - Static Analysis * Cppcheck - Open source Static Analysis tool for C/C++ * ECLAIR by BUGSENG srl. MISRA C:2004, C:2012, C:2012 Amendment 1, C++:2008. * Helix QAC by Perforce Software. MISRA C:1998, C:2004, C:2012, C++:2008.^[23] * Klocwork by Rogue Wave Software (now owned by Perforce Software^ [24]). MISRA C:2012, C:2012 Amendment 1, C++:2008.^[25] * LDRA Testbed by Liverpool Data Research Associates * Parasoft C/C++test by Parasoft. MISRA C 1998, MISRA C 2004, MISRA C 2012 AMD1, AMD2 and AMD3, MISRA C++ 2008, Draft version of MISRA C++ 202x.^[26] * PC-Lint by Gimpel Software (now owned by Vector Informatik GmbH). MISRA C:1998, C:2004, C:2012, C++:2008.^[27] * Polyspace by MathWorks * PVS-Studio by Program Verification Systems * SonarQube by SonarSource (Open Source with some commercial plug-in components) * SQuORE by Squoring Technologies * Understand by SciTools C/C++ compilers that support MISRA conformance include: * Green Hills Software * IAR Systems - MISRA C:1998, C:2004, C:2012, C++:2008.^[28] * TASKING - MISRA C:1998, C:2004, C:2012. Criticism[edit] Some research results question the effectiveness of MISRA C 2004. In a paper that compares earlier work on MISRA C:1998 with MISRA C:2004, Les Hatton comes to the conclusion that:^[29] In view of the apparent widening influence of the MISRA C standard, this paper attempts to assess whether important deficiencies in the original standard have been addressed satisfactorily. Unfortunately, they have not and the important real to false positive ratio is not much better in MISRA C 2004 than it was in MISRA C 1998 and it is unacceptably low in both. He goes on to state:^[29] In its present form, the only people to benefit from the MISRA C 2004 update would appear to be tool vendors and it is to be hoped that steps will be taken both to simplify the wording and to reduce the false positive ratio in future revisions by taking a little more notice of published experimental data and being less tempted to invent rules on the basis that they seem a good idea. A study at the TU Delft, by Cathal Boogerd and Leon Moonen, empirically assesses the value of MISRA C:2004. It comes to similar results:^[30] From the data obtained, we can make the following key observations. First, there are 9 out of 72 rules for which violations were observed that perform significantly better (a = 0.05) than a random predictor at locating fault-related lines. The true positive rates for these rules range from 24-100%. Second, we observed a negative correlation between MISRA rule violations and observed faults. In addition, 29 out of 72 rules had a zero true positive rate. Taken together with Adams' observation that all modifications have a non-zero probability of introducing a fault, this makes it possible that adherence to the MISRA standard as a whole would have made the software less reliable. See also[edit] * Programming style References[edit] 1. ^ "MISRA clarifies safe and secure uses of the C language". www.misra.org.uk. Retrieved 2019-10-09. 2. ^ In spring 1997 software engineers at the Austin Rover Group (ARG) sent a draft C coding standard to Programming Research Ltd (PRL) for review. The review was performed by PRL's then senior consultant, David Blyth, who proposed replacing the draft with an appreciably stronger set of coding rules. Those rules, with minor changes, formed the basis of the first edition of MISRA C. 3. ^ "Joint Strike Fighter Air Vehicle C++ Coding Standards" (PDF). Retrieved 2019-07-16. 4. ^ "JPL Institutional Coding Standard for the C Programming Language" (PDF). Retrieved 2019-07-16. 5. ^ "ISO 26262-6:2011 Road vehicles -- Functional safety -- Part 6: Product development at the software level". iso.org. ISO. Retrieved 2019-07-16. 6. ^ "ISO 26262-6:2018 Road vehicles -- Functional safety -- Part 6: Product development at the software level". iso.org. ISO. Retrieved 2019-07-16. 7. ^ "AUTOSAR 4.2 General Software Specification" (PDF). autosar.org . Retrieved 2019-07-16. 8. ^ "AUTOSAR 4.3 General Specification of Basic Software Modules" (PDF). autosar.org. AutoSAR. 2016-11-30. Retrieved 2019-07-16. 9. ^ MISRA publications 10. ^ ^a ^b "Fact Sheet: MISRA C:2012 (PDF)" (PDF). programmingresearch.com. Retrieved 10 June 2013. 11. ^ "MISRA Compliance:2016 (PDF)". MISRA. Retrieved 22 July 2016. 12. ^ "MISRA Compliance:2020 (PDF)" (PDF). MISRA. Retrieved 8 April 2020. 13. ^ "Achieving MISRA C:2012 Compliance". Parasoft. Retrieved May 29, 2017. 14. ^ "A brief history of MISRA C". MISRA. 2013-03-18. Retrieved 2014-06-30. 15. ^ "MISRA C:2012 release date announced". MISRA. 26 February 2013. Retrieved 10 June 2013. 16. ^ "MISRA C:2012 - Amendment 1 (PDF)". MISRA. April 2016. Retrieved 31 October 2019. 17. ^ "MISRA C:2012 - Amendment 2 (PDF)". MISRA. February 2020. Retrieved 6 January 2021. 18. ^ "MISRA C:2012 - Addendum 1: Rule Mapping (PDF)". 19. ^ "MISRA C:2012 - Addendum 2: Coverage of MISRA C:2012 against ISO/IEC TS 17961:2013 "C Secure" (PDF)". 20. ^ "MISRA C:2012 - Addendum 3: Coverage of MISRA C:2012 against CERT C (PDF)". 21. ^ MISRA GitLab repository 22. ^ "MISRA C FAQ list." MISRA Consortium 23. ^ "Helix QAC for C and C++ | Perforce". 24. ^ "Clearlake Capital-Backed Perforce Software to Acquire Rogue Wave Software | Perforce". 25. ^ "Klocwork for C, C++, C#, Java, and JavaScript | Perforce". 26. ^ "C/C++ Built-in Test Configurations". Parasoft. 17 October 2022 . Retrieved 9 March 2023. 27. ^ MISRA conformance checking, PC-lint/FlexeLint, Gimpel Software. 28. ^ Languages and Standards; iar.com 29. ^ ^a ^b Language subsetting in an industrial context: a comparison of MISRA C 1998 and MISRA C; Les Hatton; University of Kingston; 2004. 30. ^ Assessing the Value of Coding Standards: An Empirical Study; C.J. Boogerd and L. Moonen; Delft University of Technology; 2008. External links[edit] * Official website Edit this at Wikidata * "Introduction to MISRA C". embedded.com. July 2002. * "MISRA C: Safer Is Better". Electronic Design magazine. * "Commentary on the first edition of the MISRA C guidelines". knosof.co.uk. * "New Version of MISRA C: Why Should You Care?". Electronic Design magazine. * "MISRA C:2012: Plenty Of Good Reasons To Change". Electronic Design magazine. * "MISRA C:2012 fact sheet" (PDF). programmingresearch.com. * "MISRA C:2012 ensures automotive software safety". EE Times magazine. * "Compliance to MISRA C: Code Generation". Mathworks. * v * t * e C programming language * ANSI C * C99 * C11 * C17 * C23 * Embedded C * MISRA C * Functions * Header files * Operators Features * String * Syntax * Preprocessor * Data types * Char * File I/O * Math * Dynamic memory Standard library * String * Time * Variadic * POSIX * Bionic + libhybris * dietlibc * glibc Standard library + EGLIBC implementations * klibc * Windows CRT * musl * Newlib * uClibc * ACK * Borland Turbo C * Clang * GCC * ICC * LCC Compilers * Norcroft C * PCC * SDCC * TCC * Visual Studio / Express / C++ * Watcom C/C++ * Anjuta * CLion * Code::Blocks * CodeLite * Eclipse IDEs * Geany * GNOME Builder * KDevelop * Visual Studio * NetBeans Comparison with * Compatibility of C and C++ other languages * Comparison with Pascal * C++ * C# * D Descendant * Objective-C languages * Alef * Limbo * Go * Vala * # Category * v * t * e Embedded systems * ASIC * Board support package * Bootloader * Consumer electronics * Cross compiler * Embedded database * Embedded hypervisor * Embedded OS General terms * Embedded software * FPGA * IoT * Memory footprint * Microcontroller * Single-board computer + Raspberry Pi * SoC * Firmware + Custom firmware + Proprietary firmware * Closed platform * Crippleware * Defective by Design Firmware and controls * Hacking of consumer electronics * Homebrew (video games) * iOS jailbreaking * PlayStation 3 Jailbreak * Rooting (Android) * UEFI * Vendor lock-in * U-Boot Boot loaders * Barebox * uClibc * dietlibc Software libraries * Embedded GLIBC * lwIP * musl * Almquist shell * BitBake * Buildroot * BusyBox Programming tools * OpenEmbedded * Stand-alone shell * Toybox * Yocto Project * Linux on embedded systems * Linux for mobile devices * Light-weight Linux distribution Operating systems * Real-time operating system * Windows IoT + Win CE * Ada * Assembly language * CAPL * Embedded C Programming languages * Embedded C++ * Embedded Java * MISRA C * MicroPython * Lightweight browsers * List of open-source hardware * Open-source robotics * Retrieved from "https://en.wikipedia.org/w/index.php?title=MISRA_C& oldid=1175455832" Categories: * C (programming language) * C programming language family * Embedded systems * Hinckley and Bosworth * History of computing in the United Kingdom * Programming language standards * Science and technology in Leicestershire Hidden categories: * Articles with short description * Short description matches Wikidata * This page was last edited on 15 September 2023, at 05:10 (UTC). * Text is available under the Creative Commons Attribution-ShareAlike License 4.0 ; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia(r) is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization. * Privacy policy * About Wikipedia * Disclaimers * Contact Wikipedia * Code of Conduct * Developers * Statistics * Cookie statement * Mobile view * Wikimedia Foundation * Powered by MediaWiki * Toggle limited content width