Main Content

MISRA C++:2008 Rule 4-5-3

Expressions with type (plain) char and wchar_t shall not be used as operands to built-in operators other than the assignment operator =, the equality operators == and !=, and the unary & operator N

Description

Rule Definition

Expressions with type (plain) char and wchar_t shall not be used as operands to built-in operators other than the assignment operator =, the equality operators == and !=, and the unary & operator. N

Rationale

The C++ Standard requires that the characters '0' to '9' have consecutive values. Other characters do not have well-defined values. If you use these characters in operations other than the ones mentioned in the rule, you implicitly use their underlying values and might see unexpected results.

Polyspace Implementation

Polyspace® reports a violation of this rule if char and wchar_t type expressions are used with operators other than these:

  • =

  • ==

  • !=

  • unary &

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

void charManipulations (char ch) {
   
    char initChar = 'a'; //Compliant
    char finalChar = 'z'; //Compliant
    
    if(ch == initChar) {} //Compliant 
    if( (ch >= initChar) && (ch <= finalChar)) {} //Noncompliant 
    else if( (ch >= '0') && (ch <= '9') ) {} //Compliant by exception
}

In this example, character operands do not violate the rule when used with the = and == operators. Character operands can also be used with relational operators as long as the comparison is performed with the digits '0' to '9'.

Check Information

Group: Standard Conversions
Category: Required

Version History

Introduced in R2013b