Hallo kurze Frage: wenn man in dem Bedingungsfeld der for-Schleife eine Funktion einbaut, wird diese dann bei jedem Durchlauf neu ausgeführt und der return-Wert mit dem aktuellen Zählerwert verglichen oder wird die Funktion nur einmal am Anfang ausgeführt, das Ergebnis gespeichert und dann jedes mal damit verglichen? Viele Grüße Richi
Gast
#2093799
Die Bedingung wird bei jedem Durchlauf neu ausgewertet, also z.B. auch mit Funktionsaufruf.
Gast
#2093804
Das steht in einem C-Buch. >wenn man in dem Bedingungsfeld der for-Schleife eine Funktion einbaut, >wird diese dann bei jedem Durchlauf neu ausgeführt und der return-Wert mit dem aktuellen Zählerwert verglichen Nein. So speziell ist die Bedingung bei for nicht . Die Bedingung kann jeder Ausdruck mit boolschem Ergebnis sein. Es wird nicht implizit mit der Laufvariablen verglichen. Auch besteht kein Zwang selbst explizit mit der Laufvariablen zu vergleichen. Solche Fälle kommen auch vor. >oder wird die Funktion nur einmal am Anfang ausgeführt, das Ergebnis >gespeichert und dann jedes mal damit verglichen? Nein
Gast
#2093809
>Die Bedingung kann jeder Ausdruck mit boolschem Ergebnis sein.
Man muss sogar strenger formulieren. Die Bedingung muss ein Ergebnis mit
boolschem Ergebnis sein.
Da die Nachfrage fast sicher kommt. Integer-Werte werden wie folgt als
boolsche Werte interpretiert. Eine 0 heisst "Falsch". Alle
Nicht-Null-Werte heissen "Wahr".
Gast
#2093852
Richard W. schrieb: > wenn man in dem Bedingungsfeld der for-Schleife eine Funktion einbaut, > wird diese dann bei jedem Durchlauf neu ausgeführt und der return-Wert > mit dem aktuellen Zählerwert verglichen oder wird die Funktion nur > einmal am Anfang ausgeführt, das Ergebnis gespeichert und dann jedes > mal damit verglichen? Im Normalfall wird die Funktion bei jedem Durchlauf aufgerufen, da sie ja jedesmal einen anderen Wert liefern könnte. Wenn der Compiler aber erkennen kann, daß der Wert sich nicht ändert, kann der mehrfache Aufruf auch weggelassen werden (typisches Beispiel wäre strlen() von einem konstanten String). Man kann das auch durch Deklaration der Funktion mit __attribute__((const)) oder __attribute__((pure)) explizit dem Compiler mitteilen.
Danke für die vielen Antworten.
Ich muss es wohl etwas spezieller machen:
int funktion(void);
for(int i=0; i<funktion(); i++) {};
Wird die Funktion "funktion()" jetzt jedes mal aufgerufen oder nur
einmal?
Gast
#2093860
Richard W. schrieb: > Wird die Funktion "funktion()" jetzt jedes mal aufgerufen oder nur > einmal? Sie wird jedesmal aufgerufen.
ok, danke!!! viele Grüße Richi
> Wird die Funktion "funktion()" jetzt jedes mal aufgerufen oder nur > einmal? ich wuerde sagen, sie wird mindestens einmal aufgerufen, denn die funktion koennte ja auch beim ersten mal den wert 0 od eine negative zahl zurueck liefern. schoene gruesse hans --
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.