横に長すぎるソースコード
先日、実務で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";
以上。