web-dev-qa-db-ja.com

スイッチでgotoを使用できますか?

それはC#で可能であるようですが、C++とできればクロスプラットフォームでそれが必要です。

基本的に、私はものを単一の基準でソートし、それ以外のすべてのデフォルト処理にフォールバックするスイッチを持っています。

いう:

switch(color)
{
case GREEN:
case RED:
case BLUE:
    Paint();
    break;
case YELLOW:
    if(AlsoHasCriteriaX)
        Paint();
    else
        goto default;
    break;
default:
    Print("Ugly color, no Paint.")
    break;
}
32
Coder

完全ではありませんが、これを行うことができます:

switch(color)
{
case GREEN:
case RED:
case BLUE:
     Paint();
     break;
case YELLOW:
     if(AlsoHasCriteriaX) {
         Paint();
         break; /* notice break here */
     }
default:
     Print("Ugly color, no Paint.")
     break;
}

またはこれを行うことができます:

switch(color)
{
case GREEN:
case RED:
case BLUE:
     Paint();
     break;
case YELLOW:
     if(AlsoHasCriteriaX) {
         Paint();
         break; /* notice break here */
     }
     goto explicit_label;

case Fuchsia:
     PokeEyesOut();
     break;

default:
explicit_label:
     Print("Ugly color, no Paint.")
     break;
}
25
Ahmed Masud

Ahmedの答えは良いですが、次のようなものもあります。

switch(color)
case YELLOW:
    if(AlsoHasCriteriaX)
case GREEN:
case RED:
case BLUE:
        Paint();
    else
default:
        Print("Ugly color, no Paint.");

人々はスイッチがどれほど強力であるかを忘れがちです

31
Steve Cox