文字列リテラルの連結(C言語)

先日、他の人が書いたソースを見ていた後輩君からこんな質問を受けました。

char str[] = "abc"
             "def"
             "ghi";

「こんな書き方ってできるんですか?」

これって結構知られてないんでしょうか。うーむ。

ANSI Cの場合、文字列リテラルは上のように書くと連結されます。したがって上の表記は、

char str[] = "abcdefghi";

と同義になります。ただしK&R Cの場合はコンパイルエラーとなります。

この仕様によって、

#define CRLF "\n"

とかやっておいて

printf("HOGE" CRLF);

なんてかけるので便利です。

ただし注意しなくてはいけない点があります。

char *str[] = "abc",
              "def",
              "ghi"  // ','が抜けてる
              "jkl";

などと間違えてしまうと、ANSI Cの場合コンパイルエラーが出ず、意図しない動作となってしまいます。

2 Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です