第3章 C言語の条件分岐 ~ if と for について ~

休憩室

 今回は実験です。習ったばかりの条件判定の真相を調べてみましょう。

 さて、以下のような構文は、どんな動きをすると思いますか? もちろん、コンパイルエラーには、なりません。

  while ( 1 ) {
    printf("ループ中です\n");
  }

 全くループしない(繰り返さない)と思った人が多いのではないでしょうか? それとも、1回だけループすると思いましたか(1だけに)。 コンパイルして、実行してみて下さい。

 必ず、永久にループを繰り返すはずです。 こうなってしまった時は、CtrlキーとCのキーを同時に押して下さい。 では、Cnt < 1 とかと違って、ただの数字の1なのに何故動くのでしょうか。

 実は、if や for や while のカッコの中の条件判定は、 本来、0(ゼロ)以外だと処理をする、0だと処理をせずに通り過ぎるの2種類しかないのです。

 では、せっかく習った「<=」や「!=」は何だったのでしょう。 次の記述を打ち込んで、実行して見てください。

#include <stdio.h>

void main()
{
        int  result;

        result = ( (1+1) == 2 );

        printf("(1+1)==2は、%dになります。\n",  result );

        result = ( (1+1) == 1 );

        printf("(1+1)==1は、%dになります。\n",  result );

        printf("(1-1)==0は、%dになります。\n",  ((1-1) == 0) );    (1)
}

 (1)のところを見てくれれば、良く分かると思います。条件判定が正しい時は、1に置き換わってくれていますね。 わかりましたか? こんな仕組みになっていたのです。

 皆さんは講義の時間にこんなのを習っていませんか?(まだ、習ってなかったら、ごめんなさい)

 「Aが真で、Bが偽の場合、AとBの論理和(OR)は真。論理積(AND)は偽になる」  この時に、真を1、偽を0として考えるようになっていませんでしたか?

 これと同じです(C言語の場合は、1だけではなく0以外全てが真になりますが)。 ちなみに、「A || B」が論理和(OR)、「A && B」が論理積(AND)と同じことになります。

 もう一つトピックスです。変数のネーミングについてです。

 前ページで、変数のネーミング方法が2種類出てきたはずです。 loop_cnt と loopCnt です。通常、変数名が長くなってくると、 見やすいように abc_def や abcDef という具合に、二つか三つに区切ります(四つ以上は、ちょっと長すぎますね)。

 皆さんは、どちらの方が見やすいですか?最近のC++やJavaという言語の傾向からは、 abcDef(AbcDef)の方が多いようです。しかし、abc_def もなかなか根強いです。

 まぁいずれにしろ、皆さんが実際に仕事に付いたら、 同じプロジェクトで一緒になった人のネーミングに合わせることです。 大きなプロジェクトの中で、一人だけ違っていては困ってしまいます。

 また、長い名前は逆にわかりずらくなるので(打ち込むのもたいへんですし)、 通常、意味がわかるようにしつつ省略します。以下は、その代表例です。

  count    →   cnt       return   →   ret
  number   →   num      buffer   →   buf
  string    →   str       temporary →   tmp

 しかし、初めの内はなかなかセンスのある変数名を付けられないものです。

 皆さんは、なるべく上手な人のプログラムをたくさん見ることによって、 わかりやすい変数名がつけられるようになってください。

 ちなみに、繰り返し制御のために使う変数に、loop_cnt や loopCnt なんて名前はあまり付けません。 説明のために、ちょっと強引に長い名前を付けただけなので、真似をしてはいけません。

< 前のページへ

Pagetop