1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

見やすいソースコードのために文字列を改行したかった話

Posted at

横に長すぎるソースコード

先日、実務でC++を書いていたら、長い文字列を入力する必要がありました。
本当はリソースによけたりした方が良いのですが、まだプロトタイプということで直接書き下すことに。

std::string str = "よだかは、実にみにくい鳥です。顔は、ところどころ、味噌をつけたようにまだらで、くちばしは、ひらたくて、耳までさけています。足は、まるでよぼよぼで、一間とも歩けません。ほかの鳥は、もう、よだかの顔を見ただけでも、いやになってしまうという工合でした。たとえば、ひばりも、あまり美しい鳥ではありませんが、よだかよりは、ずっと上だと思っていましたので、夕方など、よだかにあうと、さもさもいやそうに、しんねりと目をつぶりながら、首をそっ方へ向けるのでした。もっとちいさなおしゃべりの鳥などは、いつでもよだかのまっこうから悪口をしました。";

ちょっと最悪ですね長すぎますね。適当なところで区切ってみましょう。

いらない要素が入ってしまったソースコード

エスケープシーケンスを用いて改行記号を無視してみます。

std::string str = "\
    よだかは、実にみにくい鳥です。\
    顔は、ところどころ、味噌をつけたようにまだらで、\
    くちばしは、ひらたくて、耳までさけています。\
    足は、まるでよぼよぼで、一間とも歩けません。\
    ほかの鳥は、もう、よだかの顔を見ただけでも、\
    いやになってしまうという工合でした。\
    たとえば、ひばりも、あまり美しい鳥ではありませんが、\
    よだかよりは、ずっと上だと思っていましたので、\
    夕方など、よだかにあうと、さもさもいやそうに、\
    しんねりと目をつぶりながら、首をそっ方へ向けるのでした。\
    もっとちいさなおしゃべりの鳥などは、\
    いつでもよだかのまっこうから悪口をしました。\
    ";

お、一見つながりましたね。
しかし、変数 str の中を見ると \t (タブ文字) が入ってしまっています。
各行の最初にあるインデントがタブ文字として扱われてしまったんですね。
(多分インデントにスペースを使っている人はスペースが入ると思います。)

余計なものが入らない改行あり文字列

std::string str =
    "よだかは、実にみにくい鳥です。"
    "顔は、ところどころ、味噌をつけたようにまだらで、"
    "くちばしは、ひらたくて、耳までさけています。"
    "足は、まるでよぼよぼで、一間とも歩けません。"
    "ほかの鳥は、もう、よだかの顔を見ただけでも、"
    "いやになってしまうという工合でした。"
    "たとえば、ひばりも、あまり美しい鳥ではありませんが、"
    "よだかよりは、ずっと上だと思っていましたので、"
    "夕方など、よだかにあうと、さもさもいやそうに、"
    "しんねりと目をつぶりながら、首をそっ方へ向けるのでした。"
    "もっとちいさなおしゃべりの鳥などは、"
    "いつでもよだかのまっこうから悪口をしました。";

この方法だと余計なものが入らず、改行した文字列を作成することができます。
タブ文字やスペースなどを無視して文字列を連結してくれるようです。
これなら、実行時間に影響なく人間の目にやさしいソースコードが書けそうです。

MSDNにも書いてあるんですね。今日まで知りませんでした。

空白のみで区切られた 2 つの文字列リテラルとして初期化された文字列ポインターは、1 つの文字列として格納されます (ポインターについては、「ポインター宣言」で説明します)。 次の例のように適切に参照すると、結果は前の例と同じになります。

char *string = "This is the first half of the string, "
               "this is the second half";

以上。

引用

1
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?