複数行の文字列リテラルの書き方 質問する

複数行の文字列リテラルの書き方 質問する

Perl のように、C++ で複数行のプレーンテキスト定数リテラルを使用する方法はありますか? おそらく、#includeファイルを解析するトリックがあるのでしょうか?

C++11 では生の文字列でそれができることは知っています。

ベストアンサー1

そうですね... そうですね。最も簡単なのは、隣接する文字列リテラルがコンパイラによって連結されるという事実を利用することです。

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 =
  "Here, on the other hand, I've gone crazy \
and really let the literal span several lines, \
without bothering with quoting each line's \
content. This works, but you can't indent.";

もう一度、各行の末尾にあるバックスラッシュに注意してください。バックスラッシュは行の終了直前になければなりません。バックスラッシュはソース内の改行をエスケープするため、すべてが改行が存在しないかのように動作します。バックスラッシュがある場所では、文字列に改行は表示されません。この形式では、インデントが文字列の一部となり、ランダムなスペースで文字化けするため、テキストをインデントすることはできません。

おすすめ記事