Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: s/header guard/include guard/g;

...

Noncompliant Code Example (

...

Include Guard)

A common, but noncompliant, practice is to choose a reserved name for a macro used in a preprocessor conditional guarding against multiple inclusions of a header file. (See also PRE06-C. Enclose header files in an inclusion include guard.) The name may clash with reserved names defined by the implementation of the C standard library in its headers or with reserved names implicitly predefined by the compiler even when no C standard library header is included.

Code Block
bgColor#FFCCCC
langc
#ifndef _MY_HEADER_H_
#define _MY_HEADER_H_

/* Contents of <my_header.h> */

#endif /* _MY_HEADER_H_ */

Compliant Solution (

...

Include Guard)

This compliant solution avoids using leading underscores in the macro name of the header include guard:

Code Block
bgColor#ccccff
langc
#ifndef MY_HEADER_H
#define MY_HEADER_H

/* Contents of <my_header.h> */

#endif /* MY_HEADER_H */

...

Using reserved identifiers can lead to incorrect program operation.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

DCL37-C

Low

Unlikely

Low

P3

L3

Automated Detection

Tool

Version

Checker

Description

Astrée
Include Page
Astrée_V
Astrée_V

future-library-use

language-override

language-override-c99

reserved-declaration

reserved-declaration-c99

reserved-identifier

Partially checked
CodeSonar
Include Page
CodeSonar_V
CodeSonar_V

LANG.STRUCT.DECL.RESERVED

Declaration of reserved name
Compass/ROSE
 

 

 




Coverity
Include Page
Coverity_V
Coverity_V

MISRA C 2004 Rule 20.1

MISRA C 2004 Rule 20.2

MISRA C 2012 Rule 21.1

MISRA C 2012 Rule 21.2

Implemented
ECLAIR
Include Page
ECLAIR_V
ECLAIR_V
CC2.DCL37Fully implemented
Klocwork
Include Page
Klocwork_V
Klocwork_V
MISRA.DEFINE.WRONGNAME.UNDERSCORE
MISRA.STDLIB.WRONGNAME.UNDERSCORE
MISRA.STDLIB.WRONGNAME
 

LDRA tool suite
Include Page
LDRA_V
LDRA_V

86 S, 218 S, 219 S, 580 S, 626 S

Fully Implemented

Parasoft C/C++test9.5MISRA2004-20_1_aFully implemented
Polyspace Bug FinderR2016aMISRA2012-RULE-21_1, 
MISRA2012-RULE-21_2
 
Partial
PRQA QA-C
Include Page
PRQA QA-C_v
PRQA QA-C_v
0602, 4600, 4601, 4602,
4603, 4604, 4605, 4606,
4607, 4608
 

SonarQube C/C++ Plugin
Include Page
SonarQube C/C++ Plugin_V
SonarQube C/C++ Plugin_V
S978
 

RuleChecker
Include Page
RuleChecker_V
RuleChecker_V

future-library-use

language-override

language-override-c99

reserved-declaration

reserved-declaration-c99

reserved-identifier

Partially checked

Related Guidelines

Bibliography

[IEEE Std 1003.1-2013]Section 2.2, "The Compilation Environment"
[ISO/IEC 9899:2011]7.1.3, "Reserved Identifiers"
7.31.10, "Integer Types <stdint.h>"

...


...