2016-07-22 7 views
0
Save=0; 
bool checking() const; ///declaration 

inline bool isZombie() const //definition 
{ if(Save==0) {return cc_t < 0} 
    if(Save==1) {return cc_i < 0;} 
} 

これは非常に素朴な質問です。私はコード内のエラーの意味を理解しています。誰でも私に言えます、なぜそれが条件でのリターン・ステートメントを受け入れていないのですか? 私はその後、ノーリターン、関数内で非空白を返す{日食CDT}

bool checking() const //definition 
{ if(Save==0) {return cc_t < 0} 
    else {return cc_i < 0;} 
} 

として上記のコードを書いた場合、何の警告はありませんか..?

+0

'保存' の種類は何ですか? –

+1

この方法の 'return'文には決して届かないかもしれないので、 – DimChtz

+0

あなたのコードには'; 'がありません。警告は、saveが3の場合、コードが未定義の動作を実行するためです。 – Yakk

答えて

3

Saveのタイプは実際には何ですか?可能なブランチの残りの部分にreturnステートメントがありません。その警告については何が分かりませんか?

inline bool isZombie() const //definition 
{ if(Save==0) {return cc_t < 0;} 
          //^Supposed this is a typo 
    if(Save==1) {return cc_i < 0;} 
    return false; // <<<<<<<<<<<<<<<<<<<<<<<<<<< 
} 
+0

保存がboolであっても、eclipseがロジックを逃してもショックを受けません。 –

+0

πάνταῥεῖの例では、ifを2回処理することができます(これは一般的には悪い設計です)。機能的には、最初のもの、2番目のもの、またはデフォルトをfalseに戻します。デフォルトはfalseです。 – M4rc

+0

@JohanLundbergあなたは実際にそれがEclipse-CDTの問題だと信じていますか? –

1

一般的には、確実な復帰パスを持つことが最善です。代わりに、

inline bool isZombie() const { 
    if(Save==0) 
     return cc_t < 0; 
    else 
     return cc_i < 0; 
} 

をまたは::たとえば

、1 としてそれを書くことができます(そして、ほとんど手つかずのあなたのコードを維持する)

inline bool isZombie() const { 
    bool rVal = (cc_i < 0); 
    if(Save==0) 
    return cc_t < 0; 
    return rVal; 
} 
+2

または 'return((Save == 0)?cc_t:cc_i)<0;' – GManNickG

+0

確かに、私は現在のフォーマット。読みやすさによっては、より理解しやすくなる人もいます。精神的に解析するのが難しいかもしれない彼のC++の露出に応じて、あなたの提案は、より正確であるということからはずれるわけではありません。 – M4rc

関連する問題