2016-05-11 9 views
1

これにより、警告C4715が生成されます。すべての制御パスが値を返すわけではありません。Visual C++スイッチの制御パスの難点

int f_no_default(bool true_or_false) 
{ 
    switch (true_or_false) 
    { 
    case (true) : 
     return 1; 
    case (false) : 
     return 0; 
    } 
} 

しかし、これにより、警告C4809が生成されます。switch文に冗長な「デフォルト」ラベルがあります。可能なすべての 'case'ラベルが与えられます。

int f_with_default(bool true_or_false) 
{ 
    switch (true_or_false) 
    { 
    case (true) : 
     return 1; 
    case (false) : 
     return 0; 
    default: 
     return 0; 
    } 
} 

どうすればよいですか? (エラーとして扱う警告をオフにする以外)

のVisual Studio 2013 V12.0

+0

打ち鳴らすが、この警告を与える:


別のオプション(あなたの関数名を持つ、より対応)が例外をスローすることですおそらくブールを入れ替えるのは悪い考えです。おそらく/ elseがより良い選択肢でしょうか? –

+0

それは私が行った方法ですよ –

答えて

2

私は何ができますか?

(エラーとして扱う警告をオフにする以外の)次のコードは、おそらくそれを修正することがあります

int f_no_default(bool true_or_false) 
{ 
    switch (true_or_false) 
    { 
    case (true) : 
     return 1; 
    case (false) : 
     return 0; 
    } 

    return 0; // <<<<<<<<<<<<<<<<< 
} 

場合のために愚かな警告だが、静的解析機能は、実際のコンパイラの実装に依存していること、警告メッセージの有用性を確認してください。 `main.cppに:5:5:スイッチの状態はブール[値]を持っている

int f_no_default(bool true_or_false) 
{ 
    switch (true_or_false) 
    { 
    case (true) : 
     return 1; 
    case (false) : 
     return 0; 
    } 

    throw std::runtime_error("Unecpected value for 'true_or_false'"); 
} 
+0

警告を解決するためにデフォルトのケースでreturn文も使用できませんでしたか? – Stephen

+0

@Stephen明らかにVS 2013ではありません。 –

関連する問題