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


von Thomas (Gast)


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

von Karl H. (kbuchegg)


Lesenswert?

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

von Sebastian (Gast)


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

von Lupin (Gast)


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.

von Christoph _. (chris)


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.

von StinkyWinky (Gast)


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.

von Fritz G. (fritzg)


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.

von Sascha (Gast)


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.

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.