Fehler bei mehrfachem Funktionsaufruf

OP #1034570
Hallo zusammen,

ich verzweifel grad an einem einfachen Codeschnipsel (Anhang)!

Problem: Wenn ich die Funktion "F_Verzoegerung(x,y)" nur ein mal aufrufe 
funktioniert das Programm wie erwartet, d.h. es wird die korrekte 
Verzögerungszeit ermittelt.

Rufe ich die Funktion F_Verzoegerung(x,y) jedoch ein zweites mal auf, 
(Freigabe_2=F_Verzoegerung(Sekundentakt,10);) kommt es zur ungewollten 
Verkürzung der Verzögerungszeit des 1. Aufrufes und dies obwohl alle 
Variablen als static deklariert sind.

Kann mich jemand auf den Weg der Erleuchtung führen, Besten Dank!

Grüße je
Angehängte Dateien:
Gast #1034579
Ich würde sagen es liegt daran das du der Variable Sekundentakt vor dem 
Eintritt in die while Schleife keinen Wert zuweist, in der wihile 
Schleife machst du das jedoch. Das musst du ändern denke ich
Moderator (Firma: Titel) Persönliche Seite #1034618
Das ist ja fast wie ein Kapierschutz (kein Schreibfehler!!) wenn eine 
Variable "First_Run" heißt, in Wahrheit aber das Gegenteil meint. Also 
eher sowas wie "Second_Run_And_Each_Run_After" ;-)

Zudem wird "Freigabe" nie zurückgesetzt. Genausowenig wie das ominöse 
"First_Run". Solltest du nach Ablauf deiner Zeit 
"Einschalt_Verzoegerung" nicht diese beiden Werte auch neu 
initialisieren?
OP #1034780
Danke für die Hinweise, dies ist es aber alles nicht, das Programm 
verhält sich so als ob die Funktion beim 2. Aufruf auf die gleichen 
lokalen Variablen wie beim 1. Aufruf zugreift (sollten baer beide mit 
einem getrennten Set an lokalen Variablen arbeiten) - kann so was an 
Compilereinstellungen liegen???

Gruß je
#1034786
Jens R. wrote:
> das Programm
> verhält sich so als ob die Funktion beim 2. Aufruf auf die gleichen
> lokalen Variablen wie beim 1. Aufruf zugreift

Natürlich tut sie das, du hast die Variablen ja schließlich als static 
deklariert. Vielleicht solltest du noch mal nachlesen, was static für 
lokale Variablen bedeutet.
OP #1034790
Hi Stefan,

static
Die Variable ist im Block gültig bzw. im Quell-Modul (also in der 
C-Datei, in der die angelegt wurde), wenn sie nicht innerhalb eines 
Blockes angelegt wurde. Statische Variablen werden nicht in Registern 
oder im Frame der Funktion angelegt, sondern im selben Speicherbereich, 
in dem auch die globalen Variablen liegen; Konstanten evtl. auch im 
Flash. Eine lokale Variable, die als static angelegt wird, "überlebt" 
also das Verlassen des Blocks und hat beim neuerlichen Betreten des 
Blockes ihren bisherigen Wert. In unterschiedlichen Blöcken angelegte 
lokale statische Variablen beziehen sich auf unterschiedliche 
Speicherstellen, genau wie bei lokalen Variablen auch.

bin schon seit 2 Tagen am "Suchen" - als was müssen die Variable dann 
deklariert werden, ihr Inhalt soll für erhalten bleiben bis zum nächsten 
Schleifendurchlauf, der 2. Aufruf der Funktion in der gleichen Schleife 
soll aber mit anderen Werten arbeiten?

eine Idee?

lg je

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.