Forum: Mikrocontroller und Digitale Elektronik Return Wert erst wenn if-Anweisung TRUE


von Alex (Gast)


Lesenswert?

Hallo,

wie kann ich den Rückgabewert so einfügen, dass er nur zurückgegeben 
wird wenn die If-Anweisung:
1
  // Wenn Taste länger gedrückt wird
2
  if (pInput->pressedCycles >50)
3
  {

TRUE ist?

Sollte die If-Anweisung FALSE sein, soll der Rückgabewert nicht 
zurückgegeben werden!

So bekomme ich die Warnung:
main.h:674: warning: control reaches end of non-void function


1
uint8_t TasterDimmenAufAb (struct inputDesc* pInput)
2
{
3
4
5
  //Steigende Flanke abfragen
6
  pInput->bR_TRIG       = Eingang[pInput->EingangArr] && !pInput->Hilfsmerker;  
7
  //Fallende Flanke abfragen
8
  pInput->bF_TRIG       = !Eingang[pInput->EingangArr] && pInput->Hilfsmerker;  
9
  pInput->Hilfsmerker   = Eingang[pInput->EingangArr];
10
11
    // Ausschalten wenn nur kurz gedrückt wurd, damit nicht ausgeschaltet
12
    // wird wenn hochgedimmt wurde!
13
    if (pInput->bF_TRIG && pInput->pressedCycles < 50 && (!pInput->TasteIstGedrueckt) && licht_status[pInput->bitStatus])
14
    {
15
    licht_schalten[pInput->bitStatus] = 1;
16
    }
17
    
18
    //Einschalten wenn noch nicht an ist  
19
    if (pInput->bR_TRIG && (!licht_status[pInput->bitStatus]))
20
    {
21
    licht_schalten[pInput->bitStatus] = 1;
22
    pInput->TasteIstGedrueckt = 1;
23
    }
24
25
    //Beim Loslassen des Tasters Speicher "TasteGedrückt" löschen  
26
    if (pInput->bF_TRIG)
27
    {
28
    pInput->TasteIstGedrueckt = 0;
29
    }
30
    //Länge des Tastendruckes aufzeichnen
31
    if (Eingang[pInput->EingangArr])
32
    pInput->pressedCycles++;
33
    else
34
    pInput->pressedCycles = 0;
35
    
36
  //#######################################################################
37
  //Dimmen
38
  //#######################################################################
39
40
  // Wenn Taste länger gedrückt wird
41
  if (pInput->pressedCycles >50)
42
  { 
43
    //Nach Zeit Dimmwert erhöhen      
44
    pInput->takt++;
45
     
46
    if (pInput->takt == 5)
47
    {         
48
49
      if (u8SpeicherDimmwert[pInput->bitStatus] == 100)
50
      pInput->aufab = 1;
51
      if (u8SpeicherDimmwert[pInput->bitStatus] == 5)
52
      pInput->aufab = 0;
53
      
54
      //Wenn unter 100%, dann plus
55
      if (u8SpeicherDimmwert[pInput->bitStatus] <100 && !pInput->aufab)    
56
      u8SpeicherDimmwert[pInput->bitStatus]++;          
57
    
58
      else if (u8SpeicherDimmwert[pInput->bitStatus] >5 && pInput->aufab)
59
      u8SpeicherDimmwert[pInput->bitStatus]--;                      
60
          
61
    pInput->takt = 0;
62
       
63
    }   
64
   
65
  
66
    return   u8SpeicherDimmwert[pInput->bitStatus];  
67
  }
68
  
69
}

von Hmm (Gast)


Lesenswert?

>So bekomme ich die Warnung:
>main.h:674: warning: control reaches end of non-void function

Der tiefere Sinn ist der: Du kannst keine non-void Funktion 
beenden/verlassen ohne einen Wert zurückzugeben.

Das
>Sollte die If-Anweisung FALSE sein, soll der Rückgabewert nicht
>zurückgegeben werden!

geht also unter keinen Umständen.

von Dietrich L. (dietrichl)


Lesenswert?

Alex schrieb:
> Sollte die If-Anweisung FALSE sein, soll der Rückgabewert nicht
> zurückgegeben werden!

Das geht nicht. Eine (nicht-void) Funktion muss immer einen Wert 
zurückgeben.
Du kannst das Ergebnis der If-Abfrage nur in dem Rückgabewert kodieren, 
z.B. bei FALSE gibst Du 0 zurück.

Gruß Dietrich

von Hmm (Gast)


Lesenswert?

Stell Dir vor Du rufst die Funktion auf:
1
if (TasterDimmenAufAb (Input) = ...)
1
unint_t a;
2
a = TasterDimmenAufAb (Input);

Woher soll Dein nachfolgender Code wissen, das kein Wert zurückgegeben 
wurde?

von Andreas B. (andreasb)


Lesenswert?

Kann sein das ich die Frage falsch verstehe (ist nicht so ganz klar..)

Aber ggf. ist ja das deine Lösung:
1
// Wenn Taste länger gedrückt wird
2
3
// Bemerke: Semikolon am Ende, und vergleich > durch <= ersetzt.
4
while(pInput->pressedCycles <= 50);
5
6
return TRUE;

> Sollte die If-Anweisung FALSE sein, soll der Rückgabewert nicht
> zurückgegeben werden!

Ist auf jeden Fall erfüllt:-)


mfg Andreas

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.