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
Mach Dir eine struct und uebergib einen Pointer. 10 Werte sind zuviel fuer eine sinnvolle Funktions- schnittstelle.
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
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.
@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.
@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.
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.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.