いつもお世話になっております。
いきなり本題ですが問題になっている言語は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;
}
以上になります。よろしくお願いします。
switchのcaseにgotoで飛ぶ方法について
-
みけCAT
Re:switchのcaseにgotoで飛ぶ方法について
C++では使えないようです。
(略)\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そのもので実験した方がいいと思います。
#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で飛ぶ方法について
即レスありがとうございます^^
コンパイルまで通していただきありがたいです♪
私の方でも一応PHPでは同様の構文で実行してみたのですが
同じくエラーで飛ぶことはできませんでした。
なので、もしかしたらC++では微妙に構文が違うのかと思い質問した次第でしたが・・・使えなさそうですね。
コンパイルまで通していただきありがたいです♪
私の方でも一応PHPでは同様の構文で実行してみたのですが
同じくエラーで飛ぶことはできませんでした。
なので、もしかしたらC++では微妙に構文が違うのかと思い質問した次第でしたが・・・使えなさそうですね。
-
toyo
Re:switchのcaseにgotoで飛ぶ方法について
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;
}
ただ質問の例であれば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;
}
-
サウス
Re:switchのcaseにgotoで飛ぶ方法について
> caseへのgotoは使えません
ありがとうございます。
他にどうしても他のcaseを実行させたい場合は、if で break の実行条件を書くなどですかね^^;
もしもcaseにgotoで飛ぶ事ができるのならコード的には読みやすくなるかと思い質問させてもらいました。
読みやすさを考慮して組むことにします。
色々有難うございました♪
ありがとうございます。
他にどうしても他のcaseを実行させたい場合は、if で break の実行条件を書くなどですかね^^;
もしもcaseにgotoで飛ぶ事ができるのならコード的には読みやすくなるかと思い質問させてもらいました。
読みやすさを考慮して組むことにします。
色々有難うございました♪
-
サウス
Re:switchのcaseにgotoで飛ぶ方法について
確かにそうですね!ありがとうございます^^
一応、C++で caseへのgotoは使え無いという事で解決とさせて頂きます。
沢山の意見有難うございました。
一応、C++で caseへのgotoは使え無いという事で解決とさせて頂きます。
沢山の意見有難うございました。