Оба, C и C ++, поддерживают, по-видимому, эквивалентный набор escape-последовательностей, таких как \b
, \t
, \n
, \"
и другие, начинающиеся с символа backsla sh (\
) , Как обрабатывается обратный символ sh, если следует нормальный символ? Насколько я помню из нескольких компиляторов escape-символ \
молча пропускается. На cppreference.com я читаю эти статьи
Я нашел только эту заметку (в статье C) о бесхозных обратных косых чертах
ISO C требует диагностики c, если соблюдается обратная косая черта sh любым символом, не указанным здесь: [...]
над справочной таблицей. Я также посмотрел некоторые онлайн-компиляторы
#include <stdio.h>
int main(void) {
// your code goes here
printf("%d", !strcmp("\\ x", "\\ x"));
printf("%d", !strcmp("\\ x", "\\\ x"));
printf("%d", !strcmp("\\ x", "\\\\ x"));
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << (string("\\ x") == "\\ x");
cout << (string("\\ x") == "\\\ x");
cout << (string("\\ x") == "\\\\ x");
return 0;
}
Оба обрабатывают "\\ x"
и "\\\ x"
как эквивалентные (вид) предупреждения с помощью подсветки синтаксиса. IOW "\\\ x"
было преобразовано в "\\ x"
.
Можно ли предположить, что это определенное поведение?
Разъяснение (правка)
- Я не спрашиваю о явно недопустимых строковых литералах, таких как
"\"
. - Я осознаю , что сирота backsla sh несколько проблематична c.
- Я хочу знать, является ли результат, созданный компилятором константой, определенным .
Редактировать # 2: Сосредоточиться еще больше на генерируемой константе (и портативность).