新しい C 言語で可変長配列が使用できることはわかりましたが、では C 言語の演算子 sizeof や、typedef を可変長配列に対して使用した場合にはどうなるでしょうか。まず始めに sizeof 演算子を適用するとどうなるかを示します。次回に typedef を示します。
getN 関数に引数 n を渡し、その大きさ分のバッファ buf を宣言します。そしてその大きさを sizeof で関数の戻り値として返します。main 関数では、引数に値を与え、戻り値を sz 変数に入れています。結果は、図からわかるように、引数と同じ値が sz に入ります。つまり、getN で sizeof している大きさは、静的に計算される値ではなく、実行時に動的に取られた値を返すことになります。
size_t getN(int n)
{
unsigned char buf[n];
return sizeof(buf);
}
main()
{
size_t sz;
sz = getN(1); //sz == 1
sz = getN(256); //sz == 256
sz = getN(1024); //sz == 1024
}
|
getN 関数に引数 n を渡し、その大きさ分のバッファ buf を宣言します。そしてその大きさを sizeof で関数の戻り値として返します。main 関数では、引数に値を与え、戻り値を sz 変数に入れています。結果は、図からわかるように、引数と同じ値が sz に入ります。つまり、getN で sizeof している大きさは、静的に計算される値ではなく、実行時に動的に取られた値を返すことになります。
by seclan