Forum: Compiler & IDEs control reaches end of non-void function


von Guelu (Gast)


Lesenswert?

Wieso bekomme ich die Warnung
warning: control reaches end of non-void function

Hier der Code:
1
uint8_t         mc1von2(void)               
2
{
3
    if ( PINC & (1<<PINC0) )            // = 1
4
    {
5
        return 1;                       // Rückgabewert
6
    }
7
    else if ( !(PINC & (1<<PINC0)) )    // = 0
8
    {
9
        return 0;                       // Rückgabewert
10
    }
11
}
Bitte um Hilfe

von Timm Reinsch (Gast)


Lesenswert?

Hallo,

weil der Programmablauf das Ende einer non-void Funktion erreichen kann 
vielleicht?

Der Compiler hat kein eigenes Gehirn, deswegen hofft er einfach, dass Du 
dir was dabei gedacht hast hinter das else noch ein if zu schreiben, 
anstatt es einfach bei else zu belassen, d.h., dass es die Möglichkeit 
gibt, für die Bedingung zu scheitern. In dem Fall gäbe es keinen 
Rückgabewert für die Funktion.

Einfach das if hinter dem else weglassen.

Vlg
Timm

von Guelu (Gast)


Lesenswert?

Hallo Timm,

vielen dank, das war es.

vlG
guelu

von R. M. (rmax)


Lesenswert?

Da es sich um eine Pin-Abfrage handelt, existiert die Möglichkeit, daß 
die zweite Bedingung scheitern könnte, übrigens nicht nur theoretisch, 
sondern auch praktisch, denn der Pin könnte seinen Zustand ja zwischen 
den zwei Tests geändert haben.

Was mich aber erstaunt ist, daß der Compiler so ein Konstrukt selbst bei 
normalen Variablen (nicht volatile) anmeckert, obwohl er da den zweiten 
Test einfach wegoptimieren dürfte. Mag aber sein, daß die Warnung 
erzeugt wird, bevor der Optimierer zum Zuge kommt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.