Main Content

MISRA C:2023 Rule 4.1

Octal and hexadecimal escape sequences shall be terminated

Since R2024a

Description

Rule Definition

Octal and hexadecimal escape sequences shall be terminated.

Rationale

There is potential for confusion if an octal or hexadecimal escape sequence is followed by other characters. For example, the character constant '\x1f' consists of a single character, whereas the character constant '\x1g' consists of the two characters '\x1' and 'g'. The manner in which multi-character constants are represented as integers is implementation-defined.

If every octal or hexadecimal escape sequence in a character constant or string literal is terminated, you reduce potential confusion.

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

const char *s1 = "\x41g";     /* Non-compliant */					
const char *s2 = "\x41" "g";  /* Compliant - Terminated by end of literal */		
const char *s3 = "\x41\x67";  /* Compliant - Terminated by another escape sequence*/		

int c1 = '\141t';             /* Non-compliant */				
int c2 = '\141\t';            /* Compliant - Terminated by another escape sequence*/		

In this example, the rule is violated when an escape sequence is not terminated with the end of string literal or another escape sequence.

Check Information

Group: Character Sets and Lexical Conventions
Category: Required
AGC Category: Required

Version History

Introduced in R2024a