Seite 1 von 1

return + unreachable -> wieso?

Verfasst: 21.08.2011, 23:10
von erikh
Hallo jungs!

hab ein kleines problem. mein Compiler gibt mir bei folgendem code einen fehler aus:

Code: Alles auswählen

if(element != 0)
{
        ///...
}
else
{
     return;
}
pagestxtinfo = count/16; // zeile 1022
der fehler:

Code: Alles auswählen

Programm\display.c(1022): warning:  #111-D: statement is unreachable
ich versteh aber nicht wieso? das return scheint hier ungeachtet des else blocks in dem es sich befindet die funktion zu verlassen. also immer! egal ob die bedingung true oder false ist. an dem auskommentierten block liegts übrigens nicht;) schon gecheckt

Kann mir jemand helfen?

Gruß, Erik

Re: return + unreachable -> wieso?

Verfasst: 21.08.2011, 23:23
von joggel
Normaler Weise ist es ja "nur" eine Warnung.
Hast du "Warnungen als Fehler behandeln" beim Compiler eingestellt?

Warum sich der Code jetzt so verhält, kann ich an dem Code-Ausschnitt auch nicht sagen

Re: return + unreachable -> wieso?

Verfasst: 21.08.2011, 23:29
von Youka
Es ist ja kein Fehler, sondern nur eine Warnung, also kompilierbar.
Die Warnung sagt nur aus, dass falls der else block eintritt, nachfolgende Werte sinnlos sind (Annahme "worst-case").

Re: return + unreachable -> wieso?

Verfasst: 21.08.2011, 23:34
von erikh
wäre ne möglichkeit, aber so ganz glaub ich da noch nicht dran. Hab noch nie für so nen konstrukt ne warnung gesehen. sch*** compiler... na ja, werds dann morgen mal an der hardware testen. bleibt mir wohl nix anderes übrig als zu hoffen.

danke trotzdem. Gruß, erik

Re: return + unreachable -> wieso?

Verfasst: 22.08.2011, 00:15
von Youka
Also ich hatte den Fall schon öfters und es ist wirklich so, dass der Compiler vom schlimmsten Fall ausgeht und deswegen die Warnung ausgibt. Sind bei dir Warnungen als Fehler eingestellt, so schalt es bei den Compiler-Optionen aus. Ebenso kannst du dort ein geringeres Warning-Level einstellen, damit weniger dumme Warnungen auftauchen.

Re: return + unreachable -> wieso?

Verfasst: 22.08.2011, 00:17
von BeRsErKeR
Ich glaube hier wäre auch mal der Code vor dem if interessant. Vielleicht kann element ja nur 0 sein?! Die Warnung würde ich schon so verstehen, dass der Code nach dem if _nie_ aufgerufen wird und das könnte wirklich auf einen anderen Fehler im Code hinweisen. Wie gesagt wäre der restliche Code vor dem if eventuell ganz aufschlussreich.

Und Warnungen sollte man nicht einfach so ausschalten. Sie haben eigentlich immer einen Grund. In der Regel sollte man versuchen alle Warnungen zu beseitigen, bis auf wenige Ausnahmen, bei denen man sich sicher ist was man tut.

Re: return + unreachable -> wieso?

Verfasst: 22.08.2011, 12:26
von Schrompf
Ich würde auch mal auf den Code vorher schauen. Am Ende hat der Compiler nur was erkannt, was Du noch nicht bemerkt hast. Nämlich, dass die Variable in der if-Bedingung nie was anderes als 0 sein kann.

Re: return + unreachable -> wieso?

Verfasst: 22.08.2011, 20:12
von TGGC
Ich glaube, du irrst dich mit 99% Wahrscheinlichkeit und der Compiler hat recht.