switchのcaseにgotoで飛ぶ方法について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
サウス

switchのcaseにgotoで飛ぶ方法について

#1

投稿記事 by サウス » 14年前

いつもお世話になっております。

いきなり本題ですが問題になっている言語はPHPを使用しています。
(PHPはC++と同様の構文で記述できるのでC++で可能であればPHPでも同じ構文が使える可能性があります)

Wikiを調べてみるとC#では以下の構文が使用可能みたいです。
以下と同様の処理をPHPかC++で使えるのでしょうか?

switch (someInteger)
{
  case 0:
  case 1:
    return 1; // 変数someIntegerが0か1の時に実行

  case 2:
    someInteger++;
    goto case 3: // case 3も実行

  case 3:
    文A;
    break;

  default:
    文B;
    break;
}


以上になります。よろしくお願いします。

みけCAT

Re:switchのcaseにgotoで飛ぶ方法について

#2

投稿記事 by みけCAT » 14年前

C++では使えないようです。
#include <stdio.h>

int main(void) {
    int a=1;
    switch(a) {
        case 0:
            printf("test0\n");
            break;
        case 1:
            printf("test1\n");
            goto case 2:
            break;
        case 2:
            printf("test2\n");
            break;
        case 3:
            printf("test3\n");
            break;
        default:
            printf("testerr\n");
            break;
    }
    return 0;
}
(略)\zikken.cpp: In function `int main()':
(略)\zikken.cpp:11: error: expected identifier before "case"
(略)\zikken.cpp:11: error: expected `;' before "case"
(略)\zikken.cpp:13: error: duplicate case value
(略)\zikken.cpp:11: error: previously used here

でも、もし使えるならPHPそのもので実験した方がいいと思います。

サウス

Re:switchのcaseにgotoで飛ぶ方法について

#3

投稿記事 by サウス » 14年前

即レスありがとうございます^^

コンパイルまで通していただきありがたいです♪

私の方でも一応PHPでは同様の構文で実行してみたのですが
同じくエラーで飛ぶことはできませんでした。

なので、もしかしたらC++では微妙に構文が違うのかと思い質問した次第でしたが・・・使えなさそうですね。

toyo

Re:switchのcaseにgotoで飛ぶ方法について

#4

投稿記事 by toyo » 14年前

caseへのgotoは使えません
ただ質問の例であればbreak;を書かなければcase 3も実行されます
それとラベルを別に書けば飛べます

int main(void)
{
int a = 1;
switch(a)
{
case 1:
printf("1 ");
goto CASE3;
break;
case 2:
printf("2 ");
break;
CASE3:
case 3:
printf("3 ");
break;
case 4:
printf("4 ");
break;

}
return 0;
}

toyo

Re:switchのcaseにgotoで飛ぶ方法について

#5

投稿記事 by toyo » 14年前

もちろんこのようなgotoの悪い見本のような書き方はやめたほうがいいと思います

サウス

Re:switchのcaseにgotoで飛ぶ方法について

#6

投稿記事 by サウス » 14年前

> caseへのgotoは使えません

ありがとうございます。

他にどうしても他のcaseを実行させたい場合は、if で break の実行条件を書くなどですかね^^;
もしもcaseにgotoで飛ぶ事ができるのならコード的には読みやすくなるかと思い質問させてもらいました。

読みやすさを考慮して組むことにします。
色々有難うございました♪

初級者

Re:switchのcaseにgotoで飛ぶ方法について

#7

投稿記事 by 初級者 » 14年前

今回の場合であれば、赤字で書いた行を消せばいいです。

サウス

Re:switchのcaseにgotoで飛ぶ方法について

#8

投稿記事 by サウス » 14年前

確かにそうですね!ありがとうございます^^

一応、C++で caseへのgotoは使え無いという事で解決とさせて頂きます。

沢山の意見有難うございました。

バグ

Re:switchのcaseにgotoで飛ぶ方法について

#9

投稿記事 by バグ » 14年前

あれ?
C#ではcaseとbreakが一対になっていないといけなかったはずでは?

閉鎖

“C言語何でも質問掲示板” へ戻る