Hallo Forum !!! Nach längeren Überlegungen muss ich doch mal die Profi´s hier um Rat fragen: Also, ich habe (z.B.) 4 globale Variablen, welche in einer Variablen.h als extern deklariert worden sind: extern uint8_t Speicher_1; extern uint8_t Speicher_2; extern uint8_t Speicher_3; extern uint8_t Speicher_4; Diese Variablen werden von überall her angesprochen und beinhalten immer einen aktuellen "Speicher"-Wert. Ich möchte nun, beim Aufruf einer Funktion angeben können, welche Variable in der Funktion benutzt wird. Also ca. so: void Funktion (uint8_t Byte, uint8_t Bit, XXXX welche Speichervariable) { uint8_t Neuer_Wert; XXX welche Speichervariable = Neuer_Wert } Wie kann man das am besten lösen ? Sollte dafür ein Struct deklariert werden, in dem die Variablen abgelegt werden? Über Ideen und Vorschläge würde ich mich freuen...Danke
Carsten D. schrieb: > Ich möchte nun, beim Aufruf einer Funktion angeben können, welche > Variable in der Funktion benutzt wird. Setze doch die Variablen in ein Array und übergebe statt "XXXX welche Speichervariable" deren Index.
Du könntest die Adresse der zu setzenden Variablen übergeben und den Wert an die entsprechende Adresse schreiben. void FunktionX (uint8_t Byte, uint8_t Bit, uint8_t * speicher){ *speicher = 123; ... } Aufruf : FunktionX (..,..,&speicher1);
Carsten D. schrieb: > Nach längeren Überlegungen muss ich doch mal die Profi´s hier um Rat > fragen: Professioneller kämst du herüber wenn du den Deppenapostroph vermeiden würdest. http://www.deppenapostroph.info
Carsten D. schrieb: > Diese Variablen werden von überall her angesprochen und beinhalten immer > einen aktuellen "Speicher"-Wert. Nur das Du mit "extern" noch keinen Speicher belegst. Wo sind denn die externen Variablen definiert? Eigentlich müsste der Compiler meckern. Funktionieren sollte es mit extern uint8_t Speicher_1 = 0; Oder verwechselst Du hier "extern" mit "volatile"?
:
Bearbeitet durch User
Erstmal lieben Dank für die Anregungen, Hinweise... Die Speichervariablen werden in der Variablen.c / Variablen.h deklariert, bzw. initialisiert - von daher auch keine Meldung des Compilers. Danke an Basti195 - der Adressoperator fehlte mir beim Aufruf und führte zum Ergebnis.
Carsten D. schrieb: > Die Speichervariablen werden in der Variablen.c / Variablen.h > deklariert, > bzw. initialisiert - von daher auch keine Meldung des Compilers. > > Danke an Basti195 - der Adressoperator fehlte mir beim Aufruf und führte > zum Ergebnis. Das hat auch den Vorteil, dass die Funktion nicht mehr von globalen Variablen abhängig ist. Man sollte es möglichst vermeiden, solche kreuz und quer im Code zu benutzen. Klug Schwätzer schrieb: > Carsten D. schrieb: >> Nach längeren Überlegungen muss ich doch mal die Profi´s hier um Rat >> fragen: > > Professioneller kämst du herüber wenn du den Deppenapostroph > vermeiden würdest. Wenn es denn wenigstens der wäre. Es ist aber nicht mal ein Apostroph, sondern ein accent grave mit einem Leerzeichen drunter.
:
Bearbeitet durch User
Rolf M. schrieb: > Klug Schwätzer schrieb: >> Carsten D. schrieb: >>> Nach längeren Überlegungen muss ich doch mal die Profi´s hier um Rat >>> fragen: >> >> Professioneller kämst du herüber wenn du den Deppenapostroph >> vermeiden würdest. > > Wenn es denn wenigstens der wäre. Es ist aber nicht mal ein Apostroph, > sondern ein accent grave mit einem Leerzeichen drunter. Noch schlimmer: Es ist sogar ein Akut! (Offtopic zwar, aber die ursprüngliche Frage wurde von den Profi'`´΄‘’′╵╹s ja bereits beantwortet)
Yalu X. schrieb: > Noch schlimmer: Es ist sogar ein Akut! > > (Offtopic zwar, aber die ursprüngliche Frage wurde von den > Profi'`´΄‘’′╵╹s ja bereits beantwortet) Nu last aber mal gut sein, das is hier ja kein Buchdruck. (OK, hübsch sied's nich' aus ;)
Yalu X. schrieb: > Noch schlimmer: Es ist sogar ein Akut! > > (Offtopic zwar, aber die ursprüngliche Frage wurde von den > Profi'`´΄‘’′╵╹s ja bereits beantwortet) Es ist ja schon ein erheblicher Fortschritt dass sich hier jemand damit auseinandersetzt. Es gab schon jähzornige Moderatoren die Beiträge zum Deppenapostroph gelöscht haben. Damit outest du dich zunächst mal als jemand der nicht zu den Jähzornigen gehört. Danke dafür, solange du nicht auf die Idee kommst doch noch zu löschen. Aber das (der, die) Böse lauert im Hintergrund immer und überall ....
Carsten D. schrieb: > angeben können, welche Variable int Variable[4] = {100, 500, 1000, 2000}; void Funktion (Variable[0]) ... void Funktion (Variable[3]) ... Aufpassen: Deklarieren [4], aber Zugriff mit [0]..[3] !
Hallo, das könnte man lösen, indem man einen Zeiger definiert, der die Adressen der vier Variablen übergeben bekommt. Je nachdem, welche Adresse angegeben wird, gilt deren Variable. MfG
Rolf M. schrieb: > Das hat auch den Vorteil, dass die Funktion nicht mehr von globalen > Variablen abhängig ist. Man sollte es möglichst vermeiden, solche kreuz > und quer im Code zu benutzen. Versteckte Abhängigkeiten wie ein direkter Zugriff auf globale Variablen, die nicht auf einen Blick an der Signatur der Funktion erkennbar sind, verdecken den Informationsfluss im Programm. Mit mehr Erfahrung lernt man (zumindest die meisten...), sowas wenn irgendwie möglich zu vermeiden.
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.