先日、他の人が書いたソースを見ていた後輩君からこんな質問を受けました。
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