2016-07-22 14 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;} 
} 
zurückbringt

ist es eine sehr naive Frage. Ich verstehe die Bedeutung des Fehlers im Code. Kann mir jemand sagen, warum es keine Rückmeldungen unter Bedingungen akzeptiert? wenn ich den obigen Code alskeine Rückkehr, in der Funktion, die nicht-void {in Eklipse CDT}

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

dann schreiben, gibt es keine Warnungen ..?

+0

, was die Art der 'Speicher' ist? –

+1

Einfach weil diese 'return' Anweisung nie erreicht werden kann – DimChtz

+0

Dein Code fehlt ein'; ', ansonsten ist es legal wenn eine schlechte Idee ist. Die Warnung lautet, dass wenn save 3 ist, Ihr Code ein nicht definiertes Verhalten ausführt. – Yakk

Antwort

3

Was ist der Typ von Save eigentlich? Sie vermissen eine return Anweisung im Rest der möglichen Zweige. Was ist so unklar an dieser Warnung?

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

Selbst wenn Save ein Bool ist, würde ich nicht schockiert sein, wenn Eclipse die Logik verfehlt. –

+0

πάντα ῥεῖ Beispiel ermöglicht es Ihnen, wenn Sie zweimal verarbeitet werden (was in der Regel schlechtes Design ist); funktionell ist es die erste, die zweite oder standardmäßig auf false zurück. Der Standardwert ist der Schlüssel hier. – M4rc

+0

@JohanLundberg Glaubst du eigentlich, es geht um Eclipse-CDT? –

1

Im Allgemeinen ist es am besten, einen sicheren Rückweg zu haben.

Zum Beispiel ein könnte schreibe es als (und den Code meist unangetastet zu halten):

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

Oder alternativ:

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

Oder 'return ((Speichern == 0)? Cc_t: cc_i) <0;' – GManNickG

+0

In der Tat, aber ich wollte behalten und leicht nachvollziehbare Logik in seinem gegenwärtigen Format . Für manche Menschen führt Lesbarkeit zu besserem Verständnis. Nicht, dass es Ihren Vorschlag davon abhält, richtiger zu sein, abhängig von seiner C++ - Exposition, die mental schwieriger zu analysieren ist. – M4rc