Verwendung einer struct und Rückgabe aus Funktion

OP #4631635
Hallo,

Leider bin ich aus anderen Threads nicht schlau geworden...

Ich nutze die WS2812 Bibliothek für die RGB-LED Ansteuerung.
In entspr. Headerdatei ist die entsprechende Struktur(cRGB) so 
definiert:
1
struct cRGB  { uint8_t g; uint8_t r; uint8_t b; };

In meinem Programm greife ich folgendermaßen darauf zu(enthält nur die 
wichtigsten Bestandteile):
1
#include "includes/light_ws2812.h"
2
#include <math.h>
3
#include <stdint.h>
4
#include <stdlib.h>
5

6
struct cRGB LED_COLOR[1];
7
struct cRGB NEW_COLOR[1];
8

9
uint8_t pseudofunction();
10

11
void main(){
12
.
13
.
14
.
15
NEW_COLOR[0] = pseudofunction();
16
ws2812_setleds(New_COLOR,1);
17
}
18

19
uint8_t pseudofunction(){
20
LED_COLOR[0].r = 255;
21
LED_COLOR[0].g = 127;
22
LED_COLOR[0].b = 0;
23

24
return LED_COLOR[0];
25
}

Jetzt las ich über die Verwendung der struct als Pointer für die 
Rückgabe.
Leider konnte ich das nicht auf mein Beispiel übertragen, da ich 
Fehlermeldungen bekam.
Wäret ihr so nett und könntet mir einen Anhaltspunkt geben?

Gruß
Hannes
Persönliche Seite #4631643
Johannes H. schrieb:
> struct cRGB LED_COLOR[1];

Welchen Sinn hat ein Array mit einem Element?

> void pseudofunction(){
> LED_COLOR[0].r = 255;
> LED_COLOR[0].g = 127;
> LED_COLOR[0].b = 0;
>
> return LED_COLOR[0];
> }

Eine Funktion muss einen Rückgabewert haben, damit sie etwas zurückgeben 
kann.

Deine Funktion aber hat keinen Rückgabewert - das hast Du mit dem void 
angegeben.
OP #4631653
Hallo Rufus,

Da hast Du allerdings recht. Ich hatte das schnell zusammengeschrieben 
und nicht an den Rückgabewert gedacht. Hab's oben korrigiert.

Die Struktur mit nur einem Element hatte ich daher, dass ich vorher ein 
Strukturarray(für mehrere LEDs) hatte und das dann einfach reduziert 
habe. Aber klar, dann kann ich auch gleich "struct cRGB LED_COLOR;" 
schreiben.
Gast #4631670
Wenn die Funktion ein struct cRGB zurückgeben soll, dann darf sie nicht 
mit Rückgabetyp uint8_t deklariert/definiert werden.

Bei solchen Problemen ist es sehr hilfreich, mit einem Minibeispiel auf 
dem PC zu experimentieren, bis man die Sprachkonstrukte verstanden hat:

https://ideone.com/k5xHWG

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.