seclan のほえほえルーム

| |

・プログラミング言語 C の新機能 Part XX: ARR#0:可変長配列: typedef (1999/08/16 [])
 前回は、可変長配列に演算子 sizeof を適用した場合を示しました。今回は、typedef 適用した場合について説明します。
 可変長配列は、直接的な変数宣言だけではなく、typedef にも適用可能です。表記方法は通常の typedef と同じです。サンプルプログラムを以下に示します。


void test(int n)
{
  //(*)

  //int の要素数 n を持つ配列 arrayN_t の型定義 
  //実行時 n = 1 なら typedef int arrayN_t[1]; と同じ
  //実行時 n = 10 なら typedef int arrayN_t[10];
  typedef int arrayN_t[n];

  n++;  //n を一つ増やす。

  //arrayN_t 型の変数 A を宣言。
  //この時点での arrayN_t の配列要素数は typedef した時点(*)でのもの。
  //n++ した後の値ではない。
  //(*)の時点で n = 1 なら int A[1]; 
  //(*)の時点で n = 10 なら int A[10]; 
  arrayN_t A;

  //int 型の要素数 n を持つ配列変数 B を宣言。
  //n++ した後の値。したがって、
  //(*)の時点で n = 1 なら int B[2]; 
  //(*)の時点で n = 10 なら int B[11]; 
  int B[n];
}

 ポイントは、typedef された時点の値が typedef の型とされるということであり、typedef された型を使用した時ではないということです。
 ちなみに、n++ が宣言の後にあり、さらにそのあとで変数宣言が記述されているのを不思議に思った人もいることでしょう。今度の C 言語では、そのうち書きますが、C++ と同様にどこでも変数宣言をできるようになりました。したがってこのような記述も可能です。
 それにしても、書いているうちに、多次元配列や関数引数上での宣言の場合などを説明する必要があるように思えてきた...。


by seclan


| |

 

配信

4.9 msec