『Cプログラミング診断室』目次次(第7章 文字処理は得意 goto)

第7章 文字処理は得意

配列サイズ


配列の要素数は、

    sizeof(msgptr)/sizeof(char *)
    sizeof(unyoutbl)/sizeof(struct sgtbuf)
のように、配列全体のバイト数を、配列要素の型のバイトサイズで割って求めています。配列要素 の型のバイトサイズとは、結局、1要素のバイト数ですから、
    sizeof(msgptr)/sizeof(msgptr[0])
    sizeof(unyoutbl)/sizeof(unyoutbl[0])
で求められます。ここまでくると、要素数を求めるマクロを作って、適当なヘッダーファイルに入 れておきたくなりますね。
    #define  Number(arr)  (sizeof(arr)/sizeof(arr[0]))
メッセージデータを配列に入れて、メッセージの数を msgcnt = 3; のように、直接数値の3が 書かれていますが、ここを間違って2などと書いてしまうと、表示メッセージが欠落します。それ ぞれが別のメッセージデータ配列になっていれば、自分で直接数値を書かず、Numberマクロの引数 を配列にすれば自動的に求められます。こうすれば、要素数が増減しても、いつも正しい要素数を 与えられるので、とても便利で、楽ができますね。

なお、Numberマクロは、XウィンドのXtNumber マクロから借用しました。


Copyright1996 Hirofumi Fujiwara. No reproduction or republication without written permission
『Cプログラミング診断室』目次次(第7章 文字処理は得意 goto)