MISRA-C:2012 Standards Model Summary for C / C++



Similar documents
The C Programming Language course syllabus associate level

Embedded Systems. Review of ANSI C Topics. A Review of ANSI C and Considerations for Embedded C Programming. Basic features of C

MSP430 C/C++ CODE GENERATION TOOLS Compiler Version 3.2.X Parser Error/Warning/Remark List

C++ INTERVIEW QUESTIONS

Keywords are identifiers having predefined meanings in C programming language. The list of keywords used in standard C are : unsigned void

Object Oriented Software Design

Storage Classes CS 110B - Rule Storage Classes Page 18-1 \handouts\storclas

Sources: On the Web: Slides will be available on:

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint)

C++ Language Tutorial

Object Oriented Software Design

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.

JAVA - QUICK GUIDE. Java SE is freely available from the link Download Java. So you download a version based on your operating system.

Boolean Expressions, Conditions, Loops, and Enumerations. Precedence Rules (from highest to lowest priority)

PART-A Questions. 2. How does an enumerated statement differ from a typedef statement?

Java Interview Questions and Answers

Moving from CS 61A Scheme to CS 61B Java

The programming language C. sws1 1

6. Control Structures

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

PROBLEM SOLVING SEVENTH EDITION WALTER SAVITCH UNIVERSITY OF CALIFORNIA, SAN DIEGO CONTRIBUTOR KENRICK MOCK UNIVERSITY OF ALASKA, ANCHORAGE PEARSON

Top 10 Bug-Killing Coding Standard Rules

Informatica e Sistemi in Tempo Reale

Chapter 5 Names, Bindings, Type Checking, and Scopes

Tutorial on C Language Programming

Programming languages C

C++ Programming Language

Semantic Analysis: Types and Type Checking

CS 141: Introduction to (Java) Programming: Exam 1 Jenny Orr Willamette University Fall 2013

1 Abstract Data Types Information Hiding

Pemrograman Dasar. Basic Elements Of Java

C Programming. for Embedded Microcontrollers. Warwick A. Smith. Postbus 11. Elektor International Media BV. 6114ZG Susteren The Netherlands

C PROGRAMMING FOR MATHEMATICAL COMPUTING

Illustration 1: Diagram of program function and data flow

Chapter 13 - The Preprocessor

Glossary of Object Oriented Terms

Course Title: Software Development

I PUC - Computer Science. Practical s Syllabus. Contents

Keil C51 Cross Compiler

Multichoice Quetions 1. Atributes a. are listed in the second part of the class box b. its time is preceded by a colon. c. its default value is

PL / SQL Basics. Chapter 3

Stacks. Linear data structures

PROGRAMMING IN C PROGRAMMING IN C CONTENT AT A GLANCE

IS0020 Program Design and Software Tools Midterm, Feb 24, Instruction

Course Name: ADVANCE COURSE IN SOFTWARE DEVELOPMENT (Specialization:.Net Technologies)

Chapter 13 Storage classes

Chapter 2: Elements of Java

Objective-C Tutorial

C++ for Safety-Critical Systems. DI Günter Obiltschnig Applied Informatics Software Engineering GmbH

AP Computer Science Java Subset

13 Classes & Objects with Constructors/Destructors

UIL Computer Science for Dummies by Jake Warren and works from Mr. Fleming

PL/SQL Overview. Basic Structure and Syntax of PL/SQL

CS 241 Data Organization Coding Standards

Bachelors of Computer Application Programming Principle & Algorithm (BCA-S102T)

About The Tutorial. Audience. Prerequisites. Copyright & Disclaimer

Scoping (Readings 7.1,7.4,7.6) Parameter passing methods (7.5) Building symbol tables (7.6)

Simple C++ Programs. Engineering Problem Solving with C++, Etter/Ingber. Dev-C++ Dev-C++ Windows Friendly Exit. The C++ Programming Language

El Dorado Union High School District Educational Services

How Safe does my Code Need to be? Shawn A. Prestridge, Senior Field Applications Engineer

Embedded C Programming, Linux, and Vxworks. Synopsis

Lecture 11 Doubly Linked Lists & Array of Linked Lists. Doubly Linked Lists

Object Oriented Software Design II

Database Programming with PL/SQL: Learning Objectives

Lecture 3. Arrays. Name of array. c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9] c[10] c[11] Position number of the element within array c

C++FA 5.1 PRACTICE MID-TERM EXAM

COMP 356 Programming Language Structures Notes for Chapter 10 of Concepts of Programming Languages Implementing Subprograms.

Data Integrator. Pervasive Software, Inc B Riata Trace Parkway Austin, Texas USA

Relational Databases

JavaScript: Control Statements I

1 The Java Virtual Machine

Java (12 Weeks) Introduction to Java Programming Language

Computer Programming I

1 Description of The Simpletron

Introduction to Java

1 Classical Universal Computer 3

Writing Control Structures

GENERIC and GIMPLE: A New Tree Representation for Entire Functions

Embedded Programming in C/C++: Lesson-1: Programming Elements and Programming in C

Applied Informatics C++ Coding Style Guide

Chapter 3 Operators and Control Flow

C++ Essentials. Sharam Hekmat PragSoft Corporation

C Compiler Targeting the Java Virtual Machine

JavaScript: Introduction to Scripting Pearson Education, Inc. All rights reserved.

MULTIPLE CHOICE. Choose the one alternative that best completes the statement or answers the question.

Lecture 22: C Programming 4 Embedded Systems

First Java Programs. V. Paúl Pauca. CSC 111D Fall, Department of Computer Science Wake Forest University. Introduction to Computer Science

Example of a Java program

Handout 1. Introduction to Java programming language. Java primitive types and operations. Reading keyboard Input using class Scanner.

5 Arrays and Pointers

Binary storage of graphs and related data

MPLAB Harmony System Service Libraries Help

VB.NET Programming Fundamentals

Lecture 9. Semantic Analysis Scoping and Symbol Table

So far we have considered only numeric processing, i.e. processing of numeric data represented

C Interview Questions

MPI-Checker Static Analysis for MPI

9 Control Statements. 9.1 Introduction. 9.2 Objectives. 9.3 Statements

Transcription:

MISRA-C:2012 Standards Model Summary for C / C++ The LDRA tool suite is developed and certified to BS EN ISO 9001:2000. This information is applicable to version 9.4.2 of the LDRA tool suite. It is correct as of 25th September 2013. Compliance is measured against "MISRA C:2012 Guidelines for the use of the C language in critical systems" 2013 Copyright MISRA Further information is available at http://www.misra.org.uk Classification Enhanced Fully Partially Not yet Not statically Enforcement Implemented Implemented Implemented Checkable Total Mandatory 0 8 2 0 0 10 9 91 9 0 2 111 6 27 5 0 0 38 Total 15 126 16 0 2 159

MISRA-C:2012 Standards Model Compliance for C / C++ Rule Classification Rule Description D.1.1 D.2.1 D.3.1 D.4.2 D.4.3 D.4.4 D.4.7 Any implementation-defined behaviour on which the output of the program depends shall be All source files shall compile without any compilation errors All code shall be traceable to documented requirements D.4.1 Run-time failures shall be minimised D.4.5 D.4.6 All usage of assembly language should be documented Assembly language shall be encapsulated and isolated Sections of code should not be 'commented out' Identifiers in the same namespace with overlapping visibility should be typographically unambiguous typedefs that indicate size and signedness should be used in place of the basic numerical types If a function returns error information, then that error information shall be tested LDRA LDRA Standard Description Standard 69 S #pragma used. Remainder of % op could be 584 S negative. 43 D Divide by 0 found. Pointer not checked for null before 45 D use. Divide by zero in preprocessor 248 S directive. 629 S Divide by zero found. 17 S Code insert found. 88 S Procedure is not pure assembler. 302 S Comment possibly contains code. 217 S Names only differ by case. Identifier is typographically 67 X ambiguous. 90 S Basic type declaration used. Typedef name has no size 495 S indication. 91 D Function return value potentially unused.

D.4.8 D.4.9 D.4.10 D.4.11 D.4.12 D.4.13 R.1.1 If a pointer to a structure or union is never dereferenced within a translation unit, then the implementation of the object should be hidden A function should be used in preference to a function-like macro where they are interchangeable Precautions shall be taken in order to prevent the contents of a header file being included more than once The validity of values passed to library functions shall be checked Dynamic memory allocation shall not be used Functions which are designed to provide operations on a resource should be called in an appropriate sequence The program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation's translation limits 104 D Structure implementation not hidden. 340 S Use of function like macro. 243 S Included file not protected with #define. 44 S Use of banned function or variable. 21 S Number of parameters does not match. 145 S #if has invalid 323 S Switch has more than one default case. 345 S Bit operator with floating point operand. 404 S Array initialisation has too many items. 481 S Array with no bounds in struct. 580 S Macro redefinition without using #undef. 615 S Conditional operator has incompatible types.

R.1.2 R.1.3 Language extensions should not be used There shall be no occurrence of undefined or critical unspecified behaviour 110 S Use of single line comment //. 143 S Curly brackets used in 293 S Non ANSI/ISO construct used. Use of // comment in macro 632 S definition. fsetpos values not generated by 82 D fgetpos. 83 D Potentially repeated call to ungetc. 84 D No fseek or flush before I/O. Illegal shared object in signal 87 D handler. 89 D Illegal use of raise in signal handler. 5 Q File does not end with new line. Number of parameters does not 21 S match. 44 S Use of banned function or variable. 64 S Void procedure used in 65 S Void variable passed as parameter. 113 S Non standard character in source. 118 S main must be int (void) or int (int,char*[]). 176 S Non standard escape sequence in source. 296 S Function declared at block scope. 324 S Macro call has wrong number of parameters. 335 S Operator defined contains illegal items. 336 S #if expansion contains define operator. 412 S Undefined behaviour, \ before E-O- F. 450 S Wide string and string concatenated.

R.1.3 undefined or critical unspecified behaviour Version 9.4.2 Copyright 2013 LDRA Ltd. R.2.1 A project shall not contain unreachable code R.2.2 There shall be no dead code Struct/union not completely 465 S specified. 482 S Incomplete structure referenced. Incorrect number of formats in 486 S output function. 487 S Insufficient space allocated. 489 S Insufficient space for operation. Type is incomplete in translation 497 S unit. Macro concatenation of uni char 573 S names. 576 S Function pointer is of wrong type. 582 S const object reassigned. Const local variable not immediately 587 S initialised. 589 S Format is not appropriate type. 590 S Mode fault in fopen. Use of explicitly undefined language 608 S feature. 66 X Insufficient array space at call. 70 X Array has insufficient space. 71 X Insufficient space for copy. 28 D Potentially infinite loop found. Procedure is not called or referenced 76 D in code analysed. 1 J Unreachable Code found. All internal linkage calls 3 J unreachable. Static procedure is not explicitly 35 S called in code analysed. 8 D DD data flow anomalies found. 65 D Void function has no side effects. DU anomaly dead code, variable 105 D value is unused on all paths. 57 S Statement with no side effect.

R.2.3 A project should not contain unused User type declared but not used in 413 S type declarations code analysed. R.2.4 A project should not contain unused User type declared but not used in 413 S tag declarations code analysed. R.2.5 A project should not contain unused macro declarations 628 S Macro not used in translation unit. R.2.6 A function should not contain unused label declarations 610 S Label is unused. R.2.7 There should be no unused 1 D Unused procedure parameter. parameters in functions 15 D Unused procedural parameter. R.3.1 The character sequences /* and // shall not be used within a comment 119 S Nested comment found. R.3.2 Line-splicing shall not be used in // comments 611 S Line splice used in // comment. R.4.1 Octal and hexadecimal escape Non standard escape sequence in 176 S sequences shall be terminated source. R.4.2 Trigraphs should not be used 81 S Use of trigraph. Identifier not unique within *** 17 D R.5.1 External identifiers shall be distinct characters. 61 X Identifier match in *** chars. Identifiers declared in the same Identifier not unique within *** 17 D R.5.2 scope and name space shall be characters. distinct 61 X Identifier match in *** chars. 17 D Identifier not unique within *** characters. R.5.3 An identifier declared in an inner scope shall not hide an identifier declared in an outer scope 18 D Identifier name reused. 92 S Duplicate use of a name in an enumeration. 128 S Parameter has same name as global variable. 131 S Name reused in inner scope. 61 X Identifier match in *** chars.

R.5.4 Macro identifiers shall be distinct R.5.5 R.5.6 Identifiers shall be distinct from macro names A typedef name shall be a unique identifier Identifier matches macro name in 31 384 S chars. Macro parameters are not unique 622 S within limits. 61 X Identifier match in *** chars. Identifier name matches macro 383 S name. Identifier matches macro name in 31 384 S chars. 12 X Identifier reuse: tag vs macro. 21 X Identifier reuse: typedef vs macro. 34 X Identifier reuse: proc vs macro. 37 X macro. Identifier reuse: component vs 47 X macro. 48 X Identifier reuse: label vs macro (MR). 50 X Identifier reuse: var vs macro. Identifier reuse: proc param vs 53 X macro. Identifier reuse: macro vs enum 57 X constant. 112 S Typedef name redeclared. 374 S Name conflict with typedef. 11 X Identifier reuse: tag vs typedef. 16 X Identifier reuse: typedef vs variable. Identifier reuse: typedef vs label 17 X (MR). 18 X Identifier reuse: typedef vs typedef. Identifier reuse: typedef vs 19 X procedure parameter. 20 X typedef.

R.5.6 A typedef name shall be a unique Version 9.4.2 Copyright 2013 LDRA Ltd. identifier R.5.7 A tag name shall be a unique identifier Identifier reuse: typedef vs 22 X component. Identifier reuse: typedef vs enum 23 X constant. Identifier reuse: typedef vs 24 X procedure. 325 S Inconsistent use of tag. Identifier reuse: struct/union tag 4 X repeated. 5 X Identifier reuse: struct vs union. Identifier reuse: struct/union tag vs 6 X enum tag. 7 X Identifier reuse: tag vs procedure. Identifier reuse: tag vs procedure 8 X parameter. 9 X Identifier reuse: tag vs variable. 10 X Identifier reuse: tag vs label (MR). 11 X Identifier reuse: tag vs typedef. 13 X Identifier reuse: tag vs component. Identifier reuse: tag vs enum 14 X constant. 15 X tag. 1 S Procedure name reused. 7 X Identifier reuse: tag vs procedure. 15 X tag. 20 X typedef. Identifier reuse: typedef vs 24 X procedure. Identifier reuse: procedure vs 25 X procedure param. 26 X label (MR). Identifiers that define objects or

27 X Identifier reuse: persist var vs persist var. R.5.8 Identifiers that define objects or functions with external linkage shall be unique 28 X var. 29 X procedure. 30 X proc param. 31 X Identifier reuse: procedure vs procedure. 32 X Identifier reuse: procedure vs var. 33 X Identifier reuse: procedure vs label (MR). 35 X Identifier reuse: proc vs component. 36 X Identifier reuse: proc vs enum constant. 38 X component. 39 X enum constant. 1 S Procedure name reused. 7 X Identifier reuse: tag vs procedure. 15 X tag. 20 X typedef. 24 X Identifier reuse: typedef vs procedure. 25 X Identifier reuse: procedure vs procedure param. 26 X label (MR). 27 X Identifier reuse: persist var vs persist var. LDRA Ltd. reserves the right Identifiers to change that any define specifications objects contained or within this document without prior notice. R.5.9 The functions document with was internal deemed linkage correct should at time of distribution. be unique

R.5.9 Identifiers that define objects or functions with internal linkage should be unique 28 X var. 29 X procedure. 30 X proc param. 31 X Identifier reuse: procedure vs procedure. 32 X Identifier reuse: procedure vs var. 33 X Identifier reuse: procedure vs label (MR). 35 X Identifier reuse: proc vs component. 36 X Identifier reuse: proc vs enum constant. 38 X component. 39 X enum constant. R.6.1 73 S Bit field not signed or unsigned int. Bit-fields shall only be declared with Bit field is not bool or explicit an appropriate type 520 S integral. R.6.2 Single-bit named bit fields shall not be of a signed type 72 S Signed bit field less than 2 bits wide. R.7.1 Octal constants shall not be used 83 S Octal number found. A "u" or "U" suffix shall be applied to 331 S Literal value requires a U suffix. R.7.2 all integer constants that are Unsuffixed hex or octal is unsigned, 550 S represented in an unsigned type add U. R.7.3 The lowercase character 'l' shall not be used in a literal suffix 252 S Lower case suffix to literal number. A string literal shall not be assigned 157 S Modification of string literal. R.7.4 to an object unless the object's type is "pointer to const-qualified char" 623 S String assigned to non const object.

R.8.1 Types shall be explicitly specified R.8.2 R.8.3 R.8.4 R.8.5 Function types shall be in prototype form with named parameters All declarations of an object or function shall use the same names and type qualifiers A compatible declaration shall be visible when an object or function with external linkage is defined An external object or function shall be declared once in one and only one file 20 S Parameter not declared explicitly. 135 S Parameter list is KR. 326 S Declaration is missing type. 37 S Procedure parameter has a type but no identifier. 63 S Empty parameter list to procedure/function. 135 S Parameter list is KR. 36 D Prototype and definition name mismatch. 63 X Function prototype/defn param type mismatch (MR). 36 D Prototype and definition name mismatch. 106 D No prototype for non-static function. 102 S Function and prototype return inconsistent (MR). 103 S Function and prototype param inconsistent (MR). 1 X Declaration types do not match across a system. 62 X Function prototype/defn return type mismatch (MR). 63 X Function prototype/defn param type mismatch (MR). 60 D External object should be declared only once. 110 D More than one prototype for same function. 172 S Variable declared multiply.

R.8.6 R.8.7 An identifier with external linkage shall have exactly one external definition Functions and objects should not be defined with external linkage if they are referenced in only one 26 D Variable should be defined once in only one file. 33 D No real declaration for external variable. 34 D Procedure name re-used in different files. 63 D No definition in system for prototyped procedure. 27 D Variable should be declared static. 61 D Procedure should be declared static. 27 D Variable should be declared static. R.8.8 R.8.9 R.8.10 R.8.11 The static storage class specifier shall be used in all declarations of objects and functions that have internal linkage An object should be defined at block scope if its identifier only appears in a single function An inline function shall be declared with the static storage class When an array with external linkage is declared, its size should be explicitly specified 61 D Procedure should be declared static. 461 S Identifier with ambiguous linkage. 553 S Function and proto should both be static. 575 S Linkage differs from previous declaration. 25 D Scope of variable could be reduced. 612 S inline function should be declared static. 127 S Array has no bounds specified. R.8.12 Within an enumerator list, the value of an implicitly-specified enumeration constant shall be unique 630 S Duplicated enumeration value. R.8.13 R.8.14 A pointer should point to a constqualified type whenever possible The restrict type qualifier shall not be used 62 D Pointer parameter should be declared const. 613 S Use of restrict keyword.

R.9.1 R.9.2 R.9.4 R.9.5 R.10.1 Mandatory The value of an object with automatic storage duration shall not be read before it has been set The initializer for an aggregate or union shall be enclosed in braces R.9.3 Arrays shall not be partially initialized An element of an object shall not be initialised more than once Where designated initialisers are used to initialize an array object the size of the array shall be specified explicitly Operands shall not be of an inappropriate essential type 53 D Attempt to use uninitialised pointer. UR anomaly, variable used before 69 D assignment. 631 S Declaration not reachable. 105 S Initialisation brace { } fault. Initialiser both positional and 627 S designational. Array initialisation has insufficient 397 S items. Initialiser both positional and 627 S designational. 620 S Initialisation designator duplicated. Initialiser both positional and 627 S designational. 127 S Array has no bounds specified. 50 S Use of shift operator on signed type. 52 S Unsigned expression negated. 93 S Value is not of appropriate type. 96 S Use of mixed mode arithmetic. 114 S Expression is not Boolean. 120 S Use of bit operator on signed type. Use of underlying enum 123 S representation value. 136 S Bit operator with boolean operand. Operation not appropriate to boolean 249 S type. Operation not appropriate to plain 329 S char. Bool value 389 S incremented/decremented. 402 S Comparison of booleans.

R.10.2 R.10.3 Expressions of essentially character type shall not be used inappropriately in addition and The value of an expression shall not be assigned to an object with a narrower essential type or of a different essential type category Negative (or potentially negative) 403 S shift. 433 S Type conversion without cast. Inappropriate use of floating point 624 S type. 96 S Use of mixed mode arithmetic. Operation not appropriate to plain 329 S char. 93 S Value is not of appropriate type. 96 S Use of mixed mode arithmetic. 101 S Function return type inconsistent. 104 S Struct field initialisation incorrect. Case is not part of switch 276 S enumeration. Implicit conversion of underlying 330 S type. 331 S Literal value requires a U suffix. Bit operator with floating point 345 S operand. Inappropriate value assigned to 411 S enum. Char used instead of (un)signed 431 S char. Inappropriate type - should be plain 432 S char. 433 S Type conversion without cast. Signed/unsigned conversion without 434 S cast. Float/integer conversion without 435 S cast. Narrower float conversion without 445 S cast. 446 S Narrower int conversion without cast.

R.10.4 R.10.5 R.10.6 R.10.7 Both operands of an operator in which the usual arithmetic conversions are performed shall have the same essential type category The value of an expression should not be cast to an inappropriate essential type The value of a composite expression shall not be assigned to an object with wider essential type If a composite expression is used as one operand of an operator in which the usual arithmetic conversions are performed then the other operand 458 S Implicit conversion: actual to formal param. 488 S Value outside range of underlying type. 93 S Value is not of appropriate type. 96 S Use of mixed mode arithmetic. 107 S Type mismatch in ternary 330 S Implicit conversion of underlying type. 331 S Literal value requires a U suffix. 433 S Type conversion without cast. 434 S Signed/unsigned conversion without cast. 435 S Float/integer conversion without cast. 488 S Value outside range of underlying type. 93 S Value is not of appropriate type. 451 S 452 S 451 S 452 S No cast for widening complex float No cast for widening complex int No cast for widening complex float No cast for widening complex int

R.10.8 R.11.1 R.11.2 R.11.3 R.11.4 R.11.5 R.11.6 R.11.7 The value of a composite expression shall not be cast to a different essential type category or a wider essential type Conversions shall not be performed between a pointer to a function and any other type Conversions shall not be performed between a pointer to incomplete and any other type A cast shall not be performed between a pointer to object type and a pointer to a different object type A conversion should not be performed between a pointer to A conversion should not be performed from pointer to void into pointer to object A cast shall not be performed between pointer to void and an A cast shall not be performed between pointer to object and a noninteger arithmetic type Widening cast on complex integer 332 S Widening cast on complex float 333 S 441 S Float cast to non-float. Signed integral type cast to 442 S unsigned. Unsigned integral type cast to 443 S signed. 444 S Integral type cast to non-integral. 93 S Value is not of appropriate type. 94 S Casting operation on a pointer. 95 S Casting operation to a pointer. 440 S Cast from integral type to pointer. 606 S Cast involving function pointer. 94 S Casting operation on a pointer. 95 S Casting operation to a pointer. 439 S Cast from pointer to integral type. 440 S Cast from integral type to pointer. 554 S Cast to an unrelated type. 94 S Casting operation on a pointer. 95 S Casting operation to a pointer. 554 S Cast to an unrelated type. 439 S Cast from pointer to integral type. 440 S Cast from integral type to pointer. 95 S Casting operation to a pointer. 439 S Cast from pointer to integral type. 440 S Cast from integral type to pointer. 94 S Casting operation on a pointer. 95 S Casting operation to a pointer. 439 S Cast from pointer to integral type. 440 S Cast from integral type to pointer.

R.11.8 R.11.9 R.12.1 R.12.2 R.12.3 R.12.4 R.13.1 R.13.2 Version 9.4.2 Copyright 2013 LDRA Ltd. A cast shall not remove any const or volatile qualification from the type The macro NULL shall be the only permitted form of integer null pointer constant The precedence of operators within expressions should be made explicit The right hand operand of a shift operator shall lie in the range zero to one less than the width in bits of the The comma operator should not be used Evaluation of constant expressions should not lead to unsigned integer Initialiser lists shall not contain persistent side effects The value of an expression and its persistent side effects shall be the same under all permitted evaluation orders 203 S Cast on a constant value. 344 S Cast on volatile value. 531 S Literal zero used in pointer context. 49 S Logical conjunctions need brackets. 361 S Expression needs brackets. 51 S Shifting value too far. Negative (or potentially negative) 403 S shift. 53 S Use of comma operator. 493 S Numeric overflow. 494 S Numeric underflow. 35 D Expression has side effects. Call has execution order dependant 1 Q side effects. 9 S Assignment operation in 30 S Deprecated usage of ++ or -- operators found. 132 S Assignment operator in boolean 134 S Volatile variable in complex 22 D Function has global variable side effects. 35 D Expression has side effects. 72 D Potential side effect problem in 74 D Potential side effect from repeated function call. 1 Q Call has execution order dependant side effects.

R.13.2 R.13.3 R.13.4 R.13.5 R.13.6 R.14.1 The Version value of 9.4.2 an expression Copyright and 2013 its LDRA Ltd. Copies persistent of this side document effects are shall not be to the be made or distributed. same under all permitted evaluation orders 9 S Assignment operation in Mandatory A full expression containing an increment (++) or decrement (--) operator should have no other potential side effects other than that caused by the increment or decrement operator The result of an assignment operator should not be used The right hand operand of a logical && or operator shall not contain persistent side effects The operand of the sizeof operator shall not contain any expression which has potential side effects A loop counter shall not have essentially floating type R.14.2 A for loop shall be well-formed 30 S 134 S 30 S Deprecated usage of ++ or -- operators found. Volatile variable in complex Deprecated usage of ++ or -- operators found. 9 S Assignment operation in 132 S Assignment operator in boolean 35 D Expression has side effects. 1 Q Call has execution order dependant side effects. 406 S Use of ++ or -- on RHS of && or operator. 408 S Volatile variable accessed on RHS of && or. 54 S Sizeof operator with side effects. 39 S Unsuitable type for loop variable. Modification of loop counter in loop 55 D body. 270 S For loop initialisation is not simple. For loop incrementation is not 271 S simple. 429 S Empty middle expression in for loop.

R.14.2 A for loop shall be well-formed R.14.3 Controlling expressions shall not be invariant Inconsistent usage of loop control 430 S variable. 581 S Loop conditions are independent. 139 S Construct leads to infeasible code. 140 S Infeasible loop condition found. R.14.4 The controlling expression of an if statement and the controlling expression of an iteration-statement shall have essentially Boolean type 114 S Expression is not Boolean. R.15.1 R.15.2 R.15.3 R.15.4 R.15.5 R.15.6 The goto statement should not be used The goto statement shall jump to a label declared later in the same function Any label referenced by a goto statement shall be declared in the same block, or in any block enclosing the goto statement There should be no more than one break or goto statement used to terminate any iteration statement A function should have a single point of exit at the end The body of an iteration-statement or a selection-statement shall be a compound statement 13 S goto detected. 509 S goto label is backwards. 511 S Jump into nested block. 409 S 7 C 11 S 12 S More than one break or goto statement in loop. Procedure has more than one exit point. No brackets to loop body (added by Testbed). No brackets to then/else (added by Testbed). 428 S No {} for switch (added by Testbed). R.15.7 R.16.1 All if.. else if constructs shall be terminated with an else statement All switch statements shall be wellformed 59 S Else alternative missing in if. 477 S Empty else clause following else if. MISRA switch statement syntax 385 S violation.

R.16.2 R.16.3 A switch label shall only be used when the most closely-enclosing compound statement is the body of a switch statement An unconditional break statement shall terminate every switch-clause 245 S Case statement in nested block. 62 S Switch case not terminated with break. R.16.4 R.16.5 R.16.6 R.16.7 R.17.1 R.17.2 R.17.3 R.17.4 R.17.5 Mandatory Mandatory Every switch statement shall have a default label A default label shall appear as either the first or the last switch label of a switch statement Every switch statement shall have at least two switch-clauses A switch-expression shall not have essentially Boolean type The features of <stdarg.h> shall not be used Functions shall not call themselves, either directly or indirectly A function shall not be declared implicitly All exit paths from a function with non-void return type shall have an explicit return statement with an expression The function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elements 48 S No default case in switch statement. 410 S Switch empty default has no comment. 322 S Default is not last case of switch. 60 S Empty switch statement. 61 S Switch contains default only. 121 S Use of boolean expression in switch. 44 S Use of banned function or variable. 6 D Recursion in procedure calls found. 1 U Inter-file recursion found. Function call with no prior 496 S declaration. Function does not return a value on 2 D all paths. 36 S Function has no return statement. Function with empty return 66 S 64 X Array bound exceeded at call.

R.17.6 R.17.7 R.17.8 R.18.1 Mandatory The declaration of an array parameter shall not contain the static keyword between the [ ] The value returned by a function having non-void return type shall be used A function parameter should not be modified A pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operand 614 S Use of static keyword in array parameter. 91 D Function return value potentially unused. 382 S (void) missing for discarded return value. 14 D Attempt to change parameter passed by value. 149 S Reference parameter to procedure is reassigned. 47 S Array bound exceeded. 436 S Declaration does not specify an array. 567 S Pointer arithmetic is not on array. 64 X Array bound exceeded at call. 68 X Parameter indexing array too big at call. 69 X Global array bound exceeded at use. 72 X Parameter indexing array too small at call. R.18.2 Subtraction between pointers shall only be applied to pointers that address elements of the same array 438 S Pointer subtraction not addressing one array. R.18.3 The relational operators >, >=, < and <= shall not be applied to objects of pointer type except where they point into the same object 437 S < > <= >= used on different object pointers. R.18.4 The +, -, += and -= operators should not be applied to an expression of 87 S Use of pointer arithmetic. 567 S Pointer arithmetic is not on array.

R.18.5 R.18.6 R.18.7 R.18.8 R.19.1 R.19.2 R.20.1 R.20.2 R.20.3 R.20.4 Mandatory Declarations should contain no more than two levels of pointer nesting The address of an object with automatic storage shall not be copied to another object that persists after the first object has ceased to exist Flexible array members shall not be declared Variable-length array types shall not be used An object shall not be assigned or copied to an overlapping object The union keyword should not be used #include directives should only be preceded by preprocessor directives or comments The ', " or \ characters and the /* or // character sequences shall not occur in a header file name The #include directive shall be followed by either a <filename> or "filename" sequence A macro shall not be defined with the same name as a keyword R.20.5 #undef should not be used 80 S Pointer indirection exceeds 2 levels. Local pointer returned in function 42 D result. Local structure returned in function 77 D result. 71 S Pointer assignment to wider scope. 565 S Assignment to wider scope. 481 S Array with no bounds in struct. 621 S Variable-length array declared. String function params access same 480 S variable. 545 S Assignment of overlapping storage. 74 S Union declared. 75 S 338 S Executable code before an included file. #include preceded by non preproc directives. 100 S #include filename is non conformant. 427 S Filename in #include not in < > or " ". 86 S Attempt to define reserved word. Macro redefinition without using 580 S #undef. 626 S #define of keyword. 68 S #undef used. 426 S #undef used in a block.

R.20.6 R.20.7 R.20.8 R.20.9 R.20.10 R.20.11 R.20.12 R.20.13 R.20.14 R.21.1 Tokens that look like a preprocessing directive shall not occur within a macro argument Expressions resulting from the expansion of macro parameters shall The controlling expression of a #if or #elif preprocessing directive shall evaluate to 0 or 1 All identifiers used in the controlling expression of #if or #elif preprocessing directives shall be #define'd before evaluation The # and ## preprocessor operators should not be used A macro parameter immediately following a # operator shall not immediately be followed by a ## operator A macro parameter used as an operand to the # or ## operators, which is itself subject to further macro replacement, shall only be used as an operand to these operators A line whose first token is # shall be a valid preprocessing directive All #else, #elif and #endif preprocessor directives shall reside in the same file as the #if, #ifdef or #define and #undef shall not be used on a reserved identifier or reserved macro name 341 S Preprocessor construct as macro parameter. 78 S Macro parameter not in brackets. 361 S Expression needs brackets. 616 S Preprocessor result not 0 or 1. 337 S Undefined macro variable in #if. 125 S Use of ## or # in a macro. 76 S More than one of # or ## in a macro. 125 S Use of ## or # in a macro. 147 S Spurious characters after preprocessor directive. 342 S Extra chars after preprocessor directive. 126 S A #if has no #endif in the same file. 343 S #else has no #if, etc in the same file. 86 S Attempt to define reserved word. Use of 'defined' keyword in macro 156 S body. 219 S User name starts with underscore.

R.21.2 R.21.3 R.21.4 R.21.5 R.21.6 A reserved identifier or macro name shall not be declared The memory allocation and deallocation functions of <stdlib.h> shall not be used The standard header file <setjmp.h> shall not be used The standard header file <signal.h> shall not be used The Standard Library input/output routines shall not be used. 218 S Name is used in standard libraries. 219 S User name starts with underscore. 44 S Use of banned function or variable. 43 S Use of setjmp/longjmp. 130 S Included file is not permitted. 44 S Use of banned function or variable. 130 S Included file is not permitted. R.21.7 The atof, atoi, atol and atoll functions of <stdlib.h> shall not be used 44 S Use of banned function or variable. R.21.8 The library functions abort, exit, getenv and system of <stdlib.h> 44 S Use of banned function or variable. 122 S Use of abort, exit, etc. R.21.9 The library functions bsearch and qsort of <stdlib.h> shall not be used 44 S Use of banned function or variable. R.21.10 R.21.11 R.21.12 R.22.1 The Standard Library time and date routines shall not be used The standard header file <tgmath.h> shall not be used The exception handling features of <fenv.h> should not be used All resources obtained dynamically by means of Standard Library functions shall be explicitly released 44 S Use of banned function or variable. 130 S Included file is not permitted. 130 S Included file is not permitted. 44 S Use of banned function or variable. 49 D File pointer not closed on exit. 50 D Memory not freed after last reference. 75 D Attempt to open file pointer more than once. R.22.2 Mandatory A block of memory shall only be freed if it was allocated by means of a Standard Library function 51 D Attempt to read from freed memory. 407 S free used on string. 483 S free parameter is not heap item. 484 S Attempt to use already freed object.

R.22.3 R.22.4 R.22.5 Mandatory Mandatory The same file shall not be open for read and write access at the same time on different streams There shall be no attempt to write to a stream which has been opened as read-only A pointer to a FILE object shall not be dereferenced 103 D File opened both read and write. 98 D Attempt to write to file opened read only. 591 S Inappropriate use of file pointer. R.22.6 Mandatory The value of a pointer to a FILE shall not be used after the associated stream has been closed 48 D Attempt to write to unopened file.