第7章  I仕様書−UNION
RPGプログラマーの為のC言語講座
RPGのデータストラクチャーは、フィールドを重ねて定義できます。

     H            Y/                                    1
     H*---------------------------------------------------------------*
     H* PROGRAM-ID    :    ISPEC5R                                    *
     H* REMARKS       :    UNION                                      *
     H* AUTHOR        :    Y.IDE                                      *
     H* DATE-WRITEN   :    1999/9/12                                  *
     H* VERSION       :    01.00 ORIGINAL                             *
     H*---------------------------------------------------------------*
     I            DS
     I                                        1   4 D1
     I                                        1   2 D2
     C*
     C                     MOVE 'ABCD'    D1
     C           D1        DSPLY
     C           D2        DSPLY
     C*
     C                     SETON                     LR
     C                     RETRN
     C*

この例だと、D1フィールドに’ABCD’をセットすると、D2フィールドは’AB’になります。

C言語のデータストラクチャーは、フィールドを重ねた定義はできません。
フィールドを重ねて定義したい場合は、UNIONを使用します。

unionを使ったCプログラム

/*---------------------------------------------------------------*/
/* PROGRAM-ID  : ISPEC5                                          */
/* REMARKS     : I仕様書DS&union                        */
/* AUTHOR      : Y.Ide                                           */
/* DATE-WRITEN : 1999/9/12                                       */
/* VERSION     : 01.00 ORIGINAL                                  */
/*---------------------------------------------------------------*/
#include <stdio.h>
#include <unistd.h>

int main(void) {
  union { char d1[4];
          char d2[2];
  } ds;

  memcpy(ds.d1,"ABCD", 4);

  printf("ds.d1 = %4.4s \n",ds.d1);
  printf("ds.d2 = %2.2s \n",ds.d2);

}

この例でも、ds.d1フィールドに’ABCD’をセットすると、ds.d2フィールドは’AB’になります。