1. ホーム
  2. c++

[解決済み] C++の複数行の文字列リテラル

2022-03-19 14:28:55

質問

C++で、Perlのように複数行のプレーンテキスト定数リテラルを使用する方法はありますか?多分 #include をファイルに入れること?私は思いつきませんが、でも、それはいいことだと思います。C++0xに搭載されるんだろうけど。

どのように解決するのですか?

まあ... ちょっとだけ。一番簡単なのは、隣接する文字列リテラルはコンパイラによって連結されるという事実を利用することだ。

const char *text =
  "This text is pretty long, but will be "
  "concatenated into just a single string. "
  "The disadvantage is that you have to quote "
  "each part, and newlines must be literal as "
  "usual.";

引用符の中ではないので、インデントは関係ない。

また、埋め込まれた改行をエスケープするように注意すれば、この方法も可能です。私の最初の回答のように、これを行わないと、コンパイルできません。

const char *text2 =
  一方、ここでは気が狂ってしまいました。
で、本当にリテラルが数行に渡っている。
をわざわざ引用せずとも、各行の୧⃛(๑⃙⃘◡̈๑⃙⃘)
の内容です。これはうまくいくのですが、インデント."ができないのです。

行末のバックスラッシュは行末の直前でなければならず、ソース中の改行をエスケープして、あたかも改行がなかったかのように振る舞います。バックスラッシュがあった場所では、文字列の中に改行が入りません。この形式では、明らかにテキストをインデントできません。インデントすると文字列の一部となり、ランダムなスペースで文字化けしてしまうからです。