第8章  IF 〜 ELSE
RPGプログラマーの為のC言語講座

IF文の使い方

IF文の使い方についてRPGとCを比較して見ましょう!

RPGでのIFの使用法は以下の通りです。

     XXXXX  IFEQ  ZZZZZ
    
            ENDIF
    

IFの条件には、EQの他に、NE,GT,GE,LT,LEがあります。

また、複合条件を指定したい場合は、OR,ANDで行を対します。

     XXXXX  IFEQ  ZZZZZ
     XXXXX  OREQ  ZZZZZ
     XXXXX  ANDEQ ZZZZZ
    
            ENDIF
    

もちろん、ELSE文も使えます。

     XXXXX  IFEQ  ZZZZZ
     XXXXX  OREQ  ZZZZZ
     XXXXX  ANDEQ ZZZZZ
    
            ELSE
    
            ENDIF
    

比較する左側 XXXXXX と右側 ZZZZZZ は同じデータタイプであることが必要です。

CでのIFの使用法は以下の通りです。

     if (1) 単一の実行文;
    
     if (1) {
       実行ブロック;
     }
    

実行する範囲は、一文の場合は続けて記述し、文の終わり ';' を付け、複数の文を実行する場合には、{ } で囲みます。

if の次に来る ( )の中に式をいれます。式の結果が 0 でない場合に実行されます。

上記のように、(1) とすると式の評価が必ず 0 でないので実行されます。逆に (0) なら実行されることはありません。

式に利用出来る演算子は、さまざまなものが用意されています。

参照マニュアルILE C/400 プログラマー解説書

演算子名結合度演算子
1次左から右() [ ] . ->
単項右から左++ -- - + ! 〜 & * (型名) sizeof digitsof, precisionof
乗除左から右* / %
加減左から右+ -
ビット単位のシフト左から右 << >>
関係左から右 < > <= >=
等値左から右 == !=
ビット単位の論理AND左から右 &
ビット単位の排他OR左から右 ^
ビット単位の包含OR左から右 |
論理AND左から右 &&
論理OR左から右 ||
条件右から左 ? :
代入右から左 = += -= *= /= <<= >>= %= &= ^= =
コンマ左から右 ,

全て解説はできませんので、詳細はマニュアルなどを参照して下さい。

式には複数の条件をつづけて記述できます。そのため演算子の優先順位と評価順は大変重要になります。

上記の表は、優先度の高い演算子順に並んでいます。

例)

  • XXXXX IFEQ ZZZZ に相当するのは if (XXXXX == ZZZZZ)

  • XXXXX IFNE ZZZZ に相当するのは if (XXXXX != ZZZZZ)

  • XXXXX IFEQ ZZZZ
    XXXXX ANDEQ YYYYY
    に相当するのは
    if (XXXXX == ZZZZ && XXXXX == YYYYY)

    == は && に優先するので、上記の評価は、
    if ( (XXXXX == ZZZZZ) && (XXXXX == YYYYY) )となる

  • XXXXX IFEQ ZZZZ
    XXXXX OREQ YYYYY
    に相当するのは
    if (XXXXX == ZZZZ || XXXXX == YYYYY)

では、以下の if は実行されるでしょうか?(式の評価は、0 でしょうか?) 

x = 0, y = 1, z = 2 とします。

if ( z = x = y )

if ( x || y )

if ( x && y )

if ( x++ )

if ( ++x )

if ( !x )

if ( x += y )

if ( x *= y )

if ( (x > y) ? x : y; )

つづく...