Main Content

AUTOSAR C++14 Rule A17-0-1

Reserved identifiers, macros and functions in the C++ standard library shall not be defined, redefined or undefined

Description

Rule Definition

Reserved identifiers, macros and functions in the C++ standard library shall not be defined, redefined or undefined.

Rationale

Defining, redefining, or undefining reserved identifiers, macros, and functions that are in the C++ standard library is not recommended. Undefined behavior might occur when defining, redefining, or undefining reserved words such as:

  • __LINE__

  • __FILE__

  • __DATE__

  • __TIME__

  • __STDC__

  • errno

  • assert

Polyspace Implementation

Polyspace® flags the preprocessor directives that define, redefine, or undefine reserved C++ standard library identifiers, macros, and functions.

Troubleshooting

If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

#define __TIME__ 3  //Noncompliant  
#undef __TIME__   //Noncompliant  

#define __cplusplus 3 //Noncompliant  
#undef __cplusplus //Noncompliant  

#define break 3 //Noncompliant  
#undef break //Noncompliant  

#define pow 3 //Noncompliant  
#undef pow //Noncompliant  


#define example 3 //Compliant 
#undef example //Compliant 

#define example 7 //Compliant

In this example, Polyspace flags preprocessor directives that define or undefine reserved C++ identifiers and macros. For instance:

  • Defining and undefining __TIME__ is noncompliant because __TIME__ is a reserved C++ macro.

  • Defining and undefining __cplusplus is noncompliant because __cplusplus is a reserved C++ macro.

  • Defining and undefining break is noncompliant because break is a reserved C++ identifier.

  • Defining and undefining pow is noncompliant because pow is a reserved C++ function.

  • Defining, undefining, and redefining example is compliant because example is not a reserved C++ macro, identifier, or function.

Check Information

Group: Library Introduction
Category: Required, Automated

Version History

Introduced in R2019a