2007/03/24
■ [C][C++] switch文とループとcaseラベル

C言語やそれとの互換性を重視しているC++(やD言語も?)では、switchの直接の内側にforやwhileのループがかけます。
#include <stdio.h> int main(int argc, char* argv[]) { int n = argc - 1; int i = 0; switch (n) { for (; i < 2; i++) { puts("a"); case 0: puts("b"); case 1: puts("c"); case 2: puts("d"); default: puts("e"); } puts("f"); } puts("g"); return 0; }
forの初期化式には絶対に到達しません。forの初期式やforとswitchの間に文があると、gccでコンパイルすると到達しない旨の警告が出ます。
$ gcc -W -Wall switchfor.c switchfor.c:3: 警告: unused parameter 'argv' $ ./a.exe 1 c d e a b c d e f g
switchは条件にあった場所にgotoしてるような感じですね。
この中でbreakを入れると、switch文を脱出することになります。
コメント