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

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

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

...

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

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

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

Ответы [ 2 ]

4 голосов
/ 27 декабря 2010

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

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

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

0 голосов
/ 27 декабря 2010

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

char* nitpicky = "I must have a \\r\\n line ending!\r\n"
"Otherwise, some other piece of code will misinterpret this line!";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...