﻿# V1094\. Conditional escape sequence in literal\. Its representation is implementation\-defined\.

Анализатор обнаружил символьный или строковый литерал, который содержит условную экранирующую последовательность\. В такой последовательности за символом обратной косой черты \('\\'\) следует символ, который не принадлежит набору стандартных экранирующих последовательностей\.

Пример:

```cpp
FILE* file = fopen("C:\C\Names.txt", "r");
```

Программист хочет открыть файл "C:\\C\\Names\.txt"\. Однако в качестве разделителя директорий используется неэкранированная обратная косая черта, которая в свою очередь начинает экранирующие последовательности '\\C' и '\\N'\. Начиная с версии стандарта C\+\+23, представление таких символов зависит от реализации компилятора\. Например, экранирующий '\\' может быть проигнорирован, и тогда будет использован следующий за ним символ\. В результате получится некорректный путь "C:CNames\.txt"\.

Чтобы исправить такой код, нужно продублировать косую черту:

```cpp
FILE* file = fopen("C:\\C\\Names.txt", "r");
```

Другие варианты последовательностей могут иметь специальное значение у разных компиляторов\. Или вызывать предупреждения в процессе сборки, например, у Clang и GCC:

```cpp
warning: unknown escape sequence: '\C'
```

Подобное поведение, определяемое реализацией, может вызывать проблемы с переносимостью кода\. А до C\+\+23 этот момент не был описан в стандарте\.

Заметить подобные последовательности глазами трудно, при этом их очень просто допустить из\-за опечатки при copy\-paste:

```cpp
....
{ARM_EXT_V6, 0x06500f70, ...., "uqsubaddx%c\t%12-15r, %16-19r, %0-3r"},
{ARM_EXT_V6, 0x06500ff0, ...., "usub16%c\t%12-15r, %16-19r, %0-3r"},
{ARM_EXT_V6, 0x06500f50, ...., "usub8%c\t%12-15r, %16-19r, %0-3r"},
{ARM_EXT_V6, 0x06500f50, ...., "usubaddx%c\t%12-15r, %16-19r, %0-3r"},
{ARM_EXT_V6, 0x06bf0f30, ...., "rev%c\t\%12-15r, %0-3r"},         // <=
{ARM_EXT_V6, 0x06bf0fb0, ...., "rev16%c\t\%12-15r, %0-3r"},       // <=
{ARM_EXT_V6, 0x06ff0fb0, ...., "revsh%c\t\%12-15r, %0-3r"},       // <=
{ARM_EXT_V6, 0xf8100a00, ...., "rfe%23?id%24?ba\t\%16-19r%21'!"}, // <=
{ARM_EXT_V6, 0x06bf0070, ...., "sxth%c\t%12-15r, %0-3r"},
{ARM_EXT_V6, 0x06bf0470, ...., "sxth%c\t%12-15r, %0-3r, ror #8"},
....
```

В этом примере есть последовательности '\\%'\.