[131] 可変長配列について
投稿者:しゅん
2007/02/20 02:13:25
「センス・オブ・プログラミング」読ませていただきました。
読んで良かったと思いました。
特に3章は共感する所が多くありました。
私もコピペやっちゃうんですよね、そして後で後悔してますね。
新人の頃に読めたらもっと何か違っていたかもと思いもしました。
ところで、可変長配列について説明(P153)がちょっと足りないのでは?
特に「Cに特有の話」の部分にかかります。
typedef struct _VARIABLEARRY {
int valMaxIndex;
char val[1]; // 1つの配列のインデックス値は本来0だけが有効。
// char val[0]; の記述はコンパイラの実装により異なる。
}VARIABLEARRY;
たとえばこの場合
int maxIndex = 10;
VARIABLEARRY *pArry;
pArry = malloc( sizeof(VARIABLEARRY) + maxIndex );
pArry->valMaxIndex = maxIndex;
pArry->val[1] = 'a'; // 配列のインデックス値が宣言した範囲を超えている。
の表記が許される事です。
BASICでは配列のインデックス値が範囲を超えるとエラーです。
Cではこれが間違いではありません。---①
また、構造体の最後のメンバを配列にする事でこれが可能である事です。---②
typedef struct _VARIABLEARRY {
char val[1];
int valMaxIndex;
}VARIABLEARRY;
とした場合は正しく機能しません。
この2点が「Cに特有の話」である事で、この説明が足りないと思いました。