[Armadillo:05018] Re: CON16 (シリアルインターフェース1)のリブート時のメッセージ抑制

Yasuhisa Nakamura email@hidden
2010年 3月 12日 (金) 02:45:29 JST


中村です。

花田さん、ありがとうございます。

[Armadillo:05017]で花田さんwrote:
> ここでのconsoleは配列型であって、代入される初期化要素は
> 集成体型(= { 1, 2, 3 } のような書き方)であってよい、
> ということがポイントと思います。
>
> いい加減に探した中でGoogleキャッシュしか見つからなくて恐縮ですが…
> ↓の表6-6参照。
> http://74.125.153.132/search?q=cache:ZOrNzBKf5lcJ:www.imit.chiba-u.ac.jp/new-system/sr/man_hitachi_c/MAN/3000/03C3100D/C310095.HTM

表の中の
 集成型 配列型 要素型がchar型
   {定数式,...}※2,
   {整数文字列リテラル}または整数文字列リテラル
と、
少し下にある説明の
 # char型の配列型のオブジェクトは,整数文字列リテラルを
 初期化指定子とすることで初期化されます。また,整数文字列
 リテラルを囲む波括弧{ }は,省略できます。
のところがポイントですね。

なるほど・・・私が「普通は・・・・こう書きますよね?」
という書き方が、実は省略形だったと。。。

>   { 'a', 'b', 'c', '\0' }      // '\0'は省略もできます
> の省略形が
>   { "abc" }
> であって、
>   "abc"
> と書いて構わないと許した…結果的にどの書き方も正しい、ということだった筈。

てっきり、 { 'a', 'b', 'c', '\0' } と "abc" が同じものと
思い込んでおりました。
char abc[] = { 'a', 'b', 'c', '\0' }; と書くのが面倒なので、
これを char abc[] = "abc"; と書くことが許されている、と。


ところで、
 char hoge[4] = { 'a', 'b', 'c', '\0' };
の場合の最後の'\0'は省略できて
 char hoge[4] = { 'a', 'b', 'c' };
がOKというのは知っていましたが、

配列数の指定がない
 char hoge[] = { 'a', 'b', 'c' };
の場合も後ろに'\0'が補われるんですね。
これもご紹介いただいたページに書いてありました。
(なんか不安がありますが・・・・)


# 私が書いた[Armadillo:05016]で、つい仕事上の悪い癖で
# 元メールを丸ごと長々と引用した無駄に長いメールに
# なってしまっていました。お許しください。

-- 
なかむら




armadillo メーリングリストの案内