C/C++プログラミング入門 – 条件分岐

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

C/C++プログラミング入門 – 変数と型』では変数と型について説明を行った。ここでは条件分岐について説明を行いたい。

条件分岐とは

簡単に言ってしまえば、「もしAならばBする」というように、一定の条件を満たしたらこの処理をするという意味である。通常は「if (条件式) { … }」あるいは「if (条件式) { … }else{ … }」のように記述する。

C言語およびC++では主に以下のように記述する。

サンプルコード1

[code lang=”c”]#include <stdio.h>
#include <stdlib.h>

int main() {
int num = 5;
if (num > 3) {
printf("numは3より大きいです。");
}
return EXIT_SUCCESS;
}[/code]

解説

ここではnumという変数に5を代入して、そのnumが3より大きいかどうかを判定している。当然ながら5は3よりも大きいため、「numは3より大きいです。」と出力される。

サンプルコード2

[code lang=”c”]#include <stdio.h>
#include <stdlib.h>

int main() {
int num = 1;
if (num > 3) {
printf("numは3より大きいです。");
}else{
printf("numは3より大きくないです。");
}
return EXIT_SUCCESS;
}[/code]

解説

この例ではnumに1が代入されているので、numは3より大きいという条件は満たさないので、「numは3より大きいです。」は表示されない。かわりにelseで条件を満たさない時の処理を行っているため、「numは3より大きくないです。」と表示される。

主な比較演算子

条件分岐では多くの場合、比較演算子が使われる。主な比較演算子は以下のとおりである。

  • 「A < B」: AはBより小さい
  • 「A >= B」: AはB以下
  • 「A == B」: AとBは等しい ((算数や数学で使われる「=」は、Javaだと代入の意味になるので要注意))
  • 「A != B」: AとBは等しくない ((C言語およびC++では文字列の値を除いて≠は表記できないので、「!=」と表記する。!は主に否定の意味で使われる))
  • 「A >= B」: AはB以上
  • 「A > B」: AはBより大きい
  • 「A」: Aを満たす(正確にはAは0ではない ※条件分岐における注意点を参照)
  • 「!A」: Aを満たさない(正確にはAは0である ※条件分岐における注意点を参照))

条件分岐における注意点

C言語およびC++では、多くの実装の場合、if文はその結果の値が0かどうかで判断する。つまり、計算された数値の値が0でなければfalse、つまり条件を満たさないという扱いとなり、0以外であればtrue、つまり条件を満たすという扱いである。

しかしながら、bool型のtrueとfalseの場合、通常は特定の値 ((多くの実装ではfalseは0、trueは1)) になっている関係上、C言語およびC++ではbool型の使い方によっては不整合が生じてしまう。もし、以下のようなコードは正常に動かない場合がある。

[code lang=”c”]bool flag = doSomething();
if (flag == true) {
// do something
}[/code]

この場合、古いC言語などではdoSomething()の結果が0か1 ((正確にはtrueの実際の値)) 以外の値が返される場合があり、そうなった場合、本来trueを想定しているはずが実際にはfalseとして扱われてしまうので、基本的には「if (flag == true) { … }」という書き方をしてはいけない。通常は以下のように書く。

[code lang=”c”]bool flag = doSomething();
if (flag) {
// do something
}[/code]

なお、falseは通常は0が割り当てられるので、「if (flag == false) { … }」という書き方は問題ないが、記述として冗長であることと、trueの場合との統一感を意識するなら、「if (!flag) { … }」という書き方もの方が自然に感じられるだろうか。

終わりに

基本的にすべてのプログラムには条件分岐が必ずと言っていいほど使われている。ここではその基礎知識と条件分岐を使う上での注意点を説明を行った。次の説明では条件分岐から発展したものを説明したい。

タイトルとURLをコピーしました