6

C++0x の最新のドラフトである n3126 には、次のように書かれています。

直後に改行文字が続くバックスラッシュ文字 (\) の各インスタンスが削除され、物理ソース行が結合されて論理ソース行が形成されます。

...

生の文字列リテラルのr-char-sequence内では、フェーズ 1 と 2 で実行された変換 (trigraph、universal-character-names、および line splicing) が元に戻されます。

技術的には、これは C++ プリプロセッサがバックスラッシュとそれに続く改行文字のみを認識することを意味しますが、一部の C++ 実装では Windows または従来の Mac スタイルの行末も許可されていることを知っています。

\生の文字列の r-char-sequence 内でバックスラッシュ文字の直後に続く改行シーケンスを保持するために、C++0x の適合する実装が必要になりますか? より良い質問は、Windows C++0x コンパイラが各行のスプライスを"\\\r\n"の代わりに元に戻すことが期待されるでしょう"\\\n"か?

4

2 に答える 2

4

翻訳フェーズ 1 の開始

物理的なソース ファイルの文字は、必要に応じて実装定義の方法で基本的なソース文字セットにマップされます (行末インジケーターに改行文字を導入します)。Trigraph シーケンス (2.3) が置き換えられます [...]

「フェーズ 1 と 2 で実行される変換 (トリグラフ、ユニバーサル文字名、およびライン スプライシング)」という要件は、ソース ファイルの文字から基本的なソース文字セットへの変換を明示的に元に戻さないものとして解釈します。代わりに、ソース文字は後で実行文字セットに変換され、そこで改行文字が取得されます。

于 2010-12-27T17:35:51.630 に答える
0

特定の行末シーケンスが必要な場合は、それを明示的に挿入して、文字列リテラル連結を使用できます。

char* nitpicky = "I must have a \\r\\n line ending!\r\n"
"Otherwise, some other piece of code will misinterpret this line!";
于 2010-12-27T18:38:24.197 に答える