mikrocontroller.net

Forum: PC-Programmierung Parameterübergabe als Struktur oder einzeln?


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe da mal eine Frage zur Parameterübergabe an Funktionen.
Ich schreibe ein Programm in C. In der Main-Funktion werden ca. 30
Werte aus einer Config-Datei in (bis jetzt) lokale Variablen
eingelesen.
Nun habe ich eine Funktion in der 10 dieser Variablenwerte benötigt
werden. Wie übergebe ich der Funktion diese Werte am
effizientesten/besten?
Sollte ich die Variablen in der Main-Funktion als Struktur anlegen und
dann der Funktion einen Pointer auf diese Struktur übergeben, oder alle
Werte einzeln übergeben?
Globale Variablen soll man ja wenn möglich vermeiden.

Danke für Hinweise

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach Dir eine struct und uebergib einen Pointer.
10 Werte sind zuviel fuer eine sinnvolle Funktions-
schnittstelle.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn wir von C reden ist ein spointer auf eine struktur am sinvollsten,
wenn du viel speicher hat kannst du auch eine stukur komplett
übergebn,.. das ist dann jedesml eine lokale kopie im ram.
Wenn es um C++ geht mache ich meist objekte und übergebe das komplette
objekt.

Sebastian

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab auch mal 'ne C frage.

Wenn ich in meiner funktion ein wenig Speicher benötige, ab wie viel
bytes sollte ich dann malloc() benutzen? Wenn ich in einer funktion zB
ein 512 byte array definiere landet das ja auf den stack,was vielleicht
nicht so gut ist, aber ein malloc aufruf kostet ja auch etwas Zeit.

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Lupin:
Das hängt von den Gegebenheiten ab. Auf einem PC kannst du völlig
problemlos 512 Bytes auf den Stack legen. Auf einem Mikrocontroller
vielleicht nicht, nur gibt es z.B. bei den AVRs keine Unterscheidung
zwischen Stack und Heap-Speicher im Sinne von getrennten "Segmenten".
Das heißt, der Speicher ist so oder so weg, egal wo du das Array
hinlegst.

Autor: StinkyWinky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Chris
Der Vorteil von malloc beim Mikrocontroller ist wohl der, dass er
meldet, ob es geklappt hat. Beim Stack gibt es halt u.U. einfach einen
Ueberlauf mit verheerenden folgen.

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In einem Unterprogramm mach sie lokal. Sie verschwindet wieder vom Stack
wenn du das Unterprogramm verlässt.
malloc nimmt man bei großem Speicherbedarf (so ab 64kB) und vor allem
wenn die benötigte Größe unbekannt ist, die kann man dann schön mir
realloc verändern.

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas
Haben die Daten einen identischen Typ? Wenn ja kannst du auch ein Array
mit 10 Elementen benutzen, ansonsten ist eine Struktur die richtige
Wahl.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.