2012/04/27

C言語 その他の制御文 switch, while, do, goto

これらの制御文は機能的には if, for で代替できる。使う理由としては、コードの読みやすさを優先させるため。扱いが楽という意味で、Syntax Sugarという。goto文に関しては、むやみに使わないようにとある。バグ、メンテなど問題が発生しやすいという理由から。これらの制御文は積極的に使うつもりはないので、基本的な書き方だけ載せておく。

while

#include <stdio.h>
int main(void){
  int i=10;
  while(i>0){
     printf("カウントダウン %d\n",i);
     i--;
  }
  return 0;
}
while文は条件を満たしている間繰り返す。
カウントダウン 10
カウントダウン 9
カウントダウン 8
カウントダウン 7
カウントダウン 6
カウントダウン 5
カウントダウン 4
カウントダウン 3
カウントダウン 2
カウントダウン 1


do while

#include <stdio.h>
int main(void){
  int a = 11;
  int i = 1;
  do{
    printf("%d回通過 a=%d\n",i,a);
    i++;
    a++;
  } while(a < 10);
    printf("%d回実行して終了\n",i-1);
  return 0;
}
do whileは条件を満たしていなくても1回は通過させる。
1回通過 a=11
1回実行して終了


switch

#include <stdio.h>
int main(void){
  int a = 2;
  switch(a){
    case 0:
        printf("aは0です\n");
        break;
    case 1:
        printf("aは1です\n");
        break;
    case 2:
        printf("aは2です\n");
        break;
    case 3:
        printf("aは3です\n");
        break;
    default:
        printf("aは0,1,2,3以外です\n");
        break;    
    }
  return 0;
}
switch文は条件によって処理を振り分けることができる。ifよりも読みやすくなる。新しいGo言語でもswitch文だけは採用されている。
aは2です


goto

#include <stdio.h>
int main(void){
    int i=0;
loop:
    printf("%d\n",i);
    i++;
    if (i > 5) goto end;
    goto loop;
end:
    printf("終了");
  return 0;
}
gotoは任意のラベルへジャンプすることができる。低級言語のアセンブラでは当たり前の命令(これしかない?)だが、高級言語では可読性を低下させるとして使われない。
0
1
2
3
4
5
終了


C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら