Если в исходных строках C++0x отменен сплайсинг строки CPP, требуется ли соответствующая реализация для сохранения исходной последовательности новой строки?

В последней версии C++0x, n3126, говорится:

Каждый экземпляр символа обратной косой черты (\), за которым сразу следует символ новой строки, удаляется, объединяя физические исходные строки для формирования логических исходных строк.

...

Внутри r-char-последовательности необработанного строкового литерала все преобразования, выполняемые на этапах 1 и 2 (триграфы, имена универсальных символов и сращивание строк), возвращаются.

Технически это означает, что препроцессор C++ распознает только обратную косую черту, за которой следует символ новой строки, но я знаю, что некоторые реализации C++ также допускают окончания строк в Windows или классическом стиле Mac.

Потребуются ли соответствующие реализации C++ 0x для сохранения последовательности новой строки, которая следует сразу за символом обратной косой черты \ в последовательности r-char необработанной строки? Может быть, лучше спросить: можно ли ожидать, что компилятор Windows C++0x отменит каждую строку с "\\\r\n" вместо "\\\n"?

2 ответа

Решение

Фаза перевода 1 начинается с

Физические символы исходного файла отображаются, в зависимости от реализации, в базовый исходный набор символов (ввод символов новой строки для индикаторов конца строки), если это необходимо. Триграф последовательности (2.3) заменены [...]

Я бы интерпретировал требование "любые преобразования, выполняемые на этапах 1 и 2 (триграфы, имена универсальных символов и сращивание строк)", как явно не возвращать преобразование из символов исходного файла в основной набор символов исходного кода. Вместо этого исходные символы позже преобразуются в набор символов выполнения, и вы получаете символы новой строки там.

Если вам нужна конкретная конечная последовательность строк, вы можете вставить ее явно и использовать конкатенацию строкового литерала:

char* nitpicky = "I must have a \\r\\n line ending!\r\n"
"Otherwise, some other piece of code will misinterpret this line!";
Другие вопросы по тегам