データ宣言とデータ定義の概要

宣言 では、 プログラムで使われるデータ・オブジェクトの名前および特性が確立されます。 定義 は、データ・オブジェクトにストレージを割り振り、そのオブジェクトに ID を関連付けます。 を宣言または定義するときは、ストレージは割り振られません。

次の表は、宣言と定義の例を示しています。最初の列に宣言されている ID は、ストレージを割り当てません。 これらの ID は、対応する定義を参照します。2 番目の列に宣言されている ID は、ストレージを割り振ります。これらの ID は、 宣言と定義の両方になります。

宣言 宣言と定義
extern double pi; double pi = 3.14159265;
struct payroll;

struct payroll {
                  char *name;
                  float salary;
               } employee;

注: C C99 標準では、すべての宣言が関数の先頭で最初のステートメントの前に置かれていなけ ればならないという制限がなくなりました。C++ と同様に、コード内で宣言と他のステートメントを混在させることができます。
宣言は、データ・オブジェクトおよび それらの ID の以下の属性を決定します。
  • スコープ。これは、オブジェクトにアクセスするために ID を使用できるプログラム・テキスト領域を記述します。
  • 可視性。これは、ID のオブジェクトへ正しくアクセスできるプログラム・テキスト領域を記述します。
  • 期間。これは、ID がメモリー内に割り振られた実際の物理オブジェクトを保持 する期間を定義します。
  • リンケージ。これは、ある特定のオブジェクトへの ID の正確な関連付けを記述します。
  • タイプ。オブジェクトにどのくらいのメモリーが割り振られるか、そのオブジェクトのスト レージ割り当てで検出されたビット・パターンをプログラムがどのように解釈すべきかを決定します。
データ・オブジェクトを宣言する際のエレメントは、次のとおりです。

IBM 拡張 IBM® 拡張の始まり。

また、ILE C/C++ では、属性 を使用して、データ・オブジェクトのプロパティーを変更できます。 属性 (これを 使用してユーザー定義型の定義を変更できます) については、型属性で説明しています。変数属性 (これを使用して変数の宣 言を変更できます) については、変数属性で説明してい ます。

IBM 拡張 IBM 拡張の終わり。

すべての宣言の形式は、次のとおりです。

構文図を読む構文図をスキップする
 データ宣言の構文 

   .-----------------------------.  .--------------------.   
   V                             |  V                    |   
>>---+-------------------------+-+----+----------------+-+------>
     '-storage_class_specifier-'      '-type_qualifier-'     

                   .-,---------------------------.      
                   V                             |      
>--type_specifier----declarator--+-------------+-+--;----------><
                                 '-initializer-'