配列の要素数は、
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 マクロから借用しました。