Cプログラミング入門

第13回 Chapter 5 if文で条件分岐(1)

この記事を読むのに必要な時間:およそ 1 分

基本的なif文の使い方

C言語で,ある条件を満たした場合のみプログラムを実行するようにするにはif文を用います。if文の使用例をリスト5.1に示します。この例では,変数iの値が5であるか,そうでないかによって分岐しています。

変数iの値が5の場合は直後の printf("i == 5\n"); が実行され,elseの部分は実行されません。逆に変数iの値が5以外の場合はelseの部分の printf("i != 5\n"); のみが実行されます。if_test.cを実際に実行してみれば,printf()関数の出力するメッセージによって,プログラムがどちらに分岐したのかがわかります。

リスト5.1 if_test.c

#include <stdio.h>

int
main()
{
  int i;

  i = 5;
  /* i = 4; */

  if (i == 5) {
    /* i == 5 だった場合の処理 */
    printf("i == 5\n");
  } else {
    /* i != 5 だった場合の処理 */
    printf("i != 5\n");
  }

  return 0;
}

図5.1 if_test.cの実行例

$ gcc -O2 -o if_test if_test.c
$ ./if_test
i == 5
$

if文は,一般的には,

  if (制御式) {
    制御式が真(0以外)の場合に実行する文
  } else {
    制御式が偽(0)の場合に実行する文
  }

という形をしています。elseの部分は必要がなければ省略でき,その場合は,

  if (制御式) {
    制御式が真(0以外)の場合に実行する文
  }

となります。

制御式のことを条件式と呼ぶ場合もありますが,条件式というと条件演算子(? :)を使った式のことを指してしまうため,本書では制御式という用語を使います。

制御式には第11回で述べた比較演算子を含んだ式を使うのが普通です。リスト5.1(if_test.c)の例では制御式として == の演算子を使った式を使用しています。

if文の( )で囲まれた制御式のあとやelseのあとには,1つの文が続きます。この文は常に{ }で囲まれた複文とするのがよいでしょう。文法上は,{ }の中に文が1つしかない場合は複文の{ }を省略して,単独の文をif文に直接続けることができますリスト5.2)。

リスト5.2 if_test.c({ }を省略した場合)

#include <stdio.h>

int
main()
{
  int i;

  i = 5;
  /* i = 4; */

  if (i == 5)
    /* i == 5 だった場合の処理 */
    printf("i == 5\n");
  else
    /* i != 5 だった場合の処理 */
    printf("i != 5\n");

  return 0;
}

しかし,これはソースの可読性などの理由で好ましくありません。今回例にとったif_test_1.cでは,ifやelseのあとにprintf();という関数による文が1つだけしかないため{ }を省略できますが,ifやelseのあとの文が複数になった場合,は{ }を付けなければならなくなります。

著者プロフィール

山森丈範(やまもりたけのり)

「C言語はアセンブラを触っているうちに自然に覚えてしまった」というプログラマ。C言語とのかかわり上,OSは専らUNIXを使用。C言語のプログラムでは,いつもLinux/FreeBSD/Solarisすべてで動くことを気に留めている。C言語と同様に移植性の高いシェルスクリプトにも思い入れが深く,著書に『シェルスクリプト基本リファレンス』がある。

著書

コメント

  • リスト5.1 if_test.cとリスト5.2 if_test.c

    両者とも#includeの後の<stdio.h>のヘッダー名が抜けてると思います。

    Commented : #1  cametan (2008/08/16, 13:18)

コメントの記入