C Rückgabewert

Janiiix3

Aktives Mitglied
28. Sep. 2013
1.333
10
38
Hannover
Sprachen
  1. ANSI C
  2. C#
Der Kompiler will mir weiß machen, dass es kein Rückgabewert gibt, stimmt ja auch teilweise.
Wie kann ich den Compiler denn befriedigen?



CodeBox C
float read_vrms(uint8_t phase)
{
  
   static uint8_t cnt;
  
   ADE7758.vrms[0] += ((float)ADE7758_read_uint24(REG_AVRMS) / FULL_SCALE_VRMS) * RMS_SPANNUNG_MAX;
   ADE7758.vrms[1] += ((float)ADE7758_read_uint24(REG_BVRMS) / FULL_SCALE_VRMS) * RMS_SPANNUNG_MAX;
   ADE7758.vrms[2] += ((float)ADE7758_read_uint24(REG_CVRMS) / FULL_SCALE_VRMS) * RMS_SPANNUNG_MAX;  
  
   if (cnt++ >= AVG)
   {
     cnt = 0;
    
     ADE7758.state |= (1<<0); // voltage average value ready
    
     ADE7758.vrms[0] /= AVG;
     ADE7758.vrms[1] /= AVG;
     ADE7758.vrms[2] /= AVG;
    
     return ADE7758.vrms[phase];    
   }
// Hier gehört normalerweiße das "return" hin.
}




CodeBox C
Warning     control reaches end of non-void function [-Wreturn-type]
 
Der Kompiler will mir weiß machen, dass es kein Rückgabewert gibt, stimmt ja auch teilweise.
Wie kann ich den Compiler denn befriedigen?

Der Compiler meckert, da eine Rückgabe nur bei einer Bedingung erfolgt.
Was wird zurückgegeben, wenn die Bedingung nicht wahr ist? ;)

Eleganter ist es, wenn du eine Rückgabevariable am Anfang der Funktion definierst und ihr einen Initialwert zuweist und diese dann am Ende der Funtion zurückgibst. In dem if-Block kannst du dieser Variablen ja einen neuen Wert zuweisen.

Dirk :ciao:
 
Ich würde es in VB.Net so machen dass ich in der if ein else if (elif) einbinde und dann "Nothing" bzw. in C# "Null" zurück gebe, damit ich es auch erkennen kann ob es einen Rückgabewert gibt oder nicht. In wie weit das in C möglich ist kA. Man könnte auch einen definitiven Wert zurückgeben der nie auftreten kann, sagen wir -32767 (Minimalwert für Int16).
Ok, ob es geklappt hat oder nicht erkennst du an deinem State, aber der Compiler weißt dich auf eine Unschönheit in deinem Quelltext hin.

Edit: Richtig wäre natürlich ein else, nicht else if. Kommt davon wenn man andere Dinge nebenbei macht…
 
Zuletzt bearbeitet:
@TommyB sehr gute Idee mit der else if. Man denkt einfach zu kompliziert.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)