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 terminated1 .

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


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace® Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.