Forum: PC-Programmierung Static Variable in Function


von Student (Gast)


Lesenswert?

Hallo zusammen,

Ich versuche eine Funktion zu erstellen, in der ich als Parameter ein 
paar statische Variablen zuordnet. Diese Variablen sollten ihren Wert in 
einer anderen Funktion ändern (erhöhen oder verringern). Zum Zeitpunkt 
der Durchführung der Tests wird jedoch festgestellt, dass der Wert 
dieser Variablen derselbe bleibt wie derjenige, der eingeleitet wurde.


static uint8_t CursorPosition;
static uint8_t PositionDigit;

STATIC LCDH_DIGIT_ENUM eEnterDigitHandler( char *cString, uint8_t 
Position, uint8_t Cursor);

/* Zuweisung der Parameter */
eEnterDigitHandler(StringEnterPassword, PositionDigit, CursorPosition);

von Nick M. (Gast)


Lesenswert?

Du musst die schon als pointer übergeben.
Grundlagen von C erst mal erarbeiten!

von Student (Gast)


Lesenswert?

Also dann so? :

static uint8_t CursorPosition;
static uint8_t PositionDigit;

STATIC LCDH_DIGIT_ENUM eEnterDigitHandler( char *cString, uint8_t
*Position, uint8_t *Cursor);

STATIC LCDH_DIGIT_ENUM eEnterDigitHandler( char *cString, uint8_t
Position, uint8_t *Cursor)
{
   if (cString[*Position] != 42)
   {
     if(*Position > 49)
     {
        eRetValue = DIGIT_COMPLETE;
     }
     else
     {
        *Position++;
         *Cursor++;

         eRetValue = DIGIT_CURSOR;
      }
    }
}

/* Zuweisung der Parameter */
eEnterDigitHandler(StringEnterPassword, &PositionDigit, 
&CursorPosition);

von Nick M. (Gast)


Lesenswert?

Wie wäre es mit ausprobieren?

von Student (Gast)


Lesenswert?

mm Die Variablen werden nicht inkrementiert.

von Thomas M. (langhaarrocker)


Lesenswert?

Im Header von
1
STATIC LCDH_DIGIT_ENUM eEnterDigitHandler( char *cString, uint8_t
2
Position, uint8_t *Cursor)

hast Du vergessen Position als Pointer zu deklarieren

von Student (Gast)


Lesenswert?

Ja das stimmt,Danke  aber trotzdem tut das nicht.

von DPA (Gast)


Lesenswert?

Student schrieb:
> *Position++;

Achau dir mal die Operator Precedence in C an: 
https://en.cppreference.com/w/c/language/operator_precedence

Und dann überleg dir, ob das was du oben geschrieben hast, eher 
(*Position)++ oder *(Position++) entspricht, und welches du warum 
brauchst.

von DPA (Gast)


Lesenswert?

Der GCC sollte bei sowas eigentlich auch warnen, wenn man warnungen 
eingeschalten hat. Mit etwas in die Richtung "statement without effect" 
oder so.

von Student (Gast)


Lesenswert?

Vielen Dank!  Ja das habe ich jetzt bekommen.

Habt ihr noch Empfehlungen wo man mehr in der C 
Programmierung-Grundlagen solche Sachen vertiefen kann?

Vielen Dank

von Oliver S. (oliverso)


Lesenswert?

K&R, zweite Auflage

Oliver

von Nick M. (Gast)


Lesenswert?

Oliver S. schrieb:
> K&R, zweite Auflage

Dieser fürchterliche K&R! So programmiert heute hoffentlich keiner mehr.
C in a nutshell von König ist ganz gut, aber eher ein Referenzwerk.

Als Lehrbuch hab ich den Mix C Compiler in guter Erinnerlung. Buch und 
Compiler kosten etwa $20. War aber nicht ganz standard-konform. Ist fürn 
Anfang aber egal.

von Fazin (Gast)


Lesenswert?

> Oliver S. schrieb:

> K&R, zweite Auflage

So ist es. Alles andere ist für Müslis & Warmduscher.

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.