Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43248
Benutzer: 7.220
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 3 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 259
Gesamt: 259
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree2Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 23.03.18
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard possible use of uninitialized variable

Ich habe ein Verständnisproblem, warum ich die Warnung
"possible use of uninitialized variable 'Factor' " für folgenden Codeaufbau bekomme, und zwar für die rote Zeile:
Code:
// head
int a;          // used everywhere in several functions
double FinalVal;
// end head

Func()
{
   if(Condition)
   {
      int Factor;
      if(Cond1)      Factor=2;
      else if(Cond2) Factor=3;
      // more code for a and Variable calc
      FinalVal=NormalizeDouble(a*Variable*Factor,2);
   }
}
Factor wird ausschließlich in Func() gebraucht, also gehört es da rein und nicht in den Head (steht es da, ist die Warnung weg) und es wird auch nur gebraucht, wenn die Bedingung true ist, also gehört es da rein und nicht an den Anfang der Func(). Und auch wenn dazwischen 1000 Zeilen Code stehen, bevor FinalVal kommt, das Ding ist initialized und ich verstehe nicht, warum ich ne Warnung kriege. Kann mich da vielleicht mal jemand erleuchten.
Danke. AVT
  #2 (permalink)  
Alt 23.03.18
Premium Mitglied
 
Registriert seit: Apr 2015
Beiträge: 422
Raul0 befindet sich auf einem aufstrebenden Ast
Standard

Versuche doch der Variable Faktor einen Erst-Wert zu geben, zB:

PHP-Code:
int Factor 0
AVT likes this.
__________________

Easy Trading Assistant
  #3 (permalink)  
Alt 24.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
Und auch wenn dazwischen 1000 Zeilen Code stehen, bevor FinalVal kommt, das Ding ist initialized...
Nicht ganz. Der Compiler sieht da die Deklaration deiner Variablen ohne einen Anfangswert zu definieren.
Sofern eine Variable keinen "echten" Wert zugewiesen bekommt, "erhält" sie einen undefinierten Standardwert.
Einen echten Wert erhält deine Variable aber nur beim Zutreffen einer Bedingung. Wäre da ein "if-else" anstatt "if-else if", so würde
deine Variable in jedem Fall einen echten Wert bekommen.

Also kurz:
Erhält eine Variable nur unter Bedingungen einen Wert, denkt der Compiler sich "die Bedingungen können auch NICHT zutreffen".
Eine weitere Nutzung einer solchen Variable lässt den Compiler dann warnen "diese Variable wurde vorher möglicherweise nicht
mit einem Wert gefütter..."
AVT likes this.
  #4 (permalink)  
Alt 24.03.18
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Ich danke Euch, Raul0 und next user.
Zitat:
Zitat von next user Beitrag anzeigen
Nicht ganz. Der Compiler sieht da die Deklaration deiner Variablen ohne einen Anfangswert zu definieren.
Sofern eine Variable keinen "echten" Wert zugewiesen bekommt, "erhält" sie einen undefinierten Standardwert.
declaration != initialization
Zitat:
Zitat von next user Beitrag anzeigen
Wäre da ein "if-else" anstatt "if-else if", so würde deine Variable in jedem Fall einen echten Wert bekommen..
Jep, die 3. Zeile "else" hatte ich auskommentiert, mein Fehler. Alte Regel "kein if ohne else" (macht zwar den Code manchmal unnötig lang, verhindert aber Fehler) mal wieder mißachtet.
Wer mal die glibc mit allwarnings kompiliert hat, lernt schnell eine Warnung ist eine Warnung und kein Fehler, aber ich hab's lieber ohne Warnungen im strict Modus. AVT
  #5 (permalink)  
Alt 24.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AVT Beitrag anzeigen
declaration != initialization
Hi,

mir sind die Unterschiede zwischen Deklaration, Definition, Initialisierung ect. bekannt.
Deine Anmerkung passt allerdings nicht zu meinen Sätzen. Du musst diese schon zusammen betrachten.
Besonders im ersten Satz von mir "umschreibe" ich da KEINE Deklaration mit einer Initialisierung, aber ist ja auch egal...

Zitat:
Zitat von AVT Beitrag anzeigen
... aber ich hab's lieber ohne Warnungen im strict Modus.
Geht mir genauso.
  #6 (permalink)  
Alt 24.03.18
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von next user Beitrag anzeigen
mir sind die Unterschiede zwischen Deklaration, Definition, Initialisierung ect. bekannt.
Aber mir anscheinend nicht genug! Und ich hatte Dich so verstanden, daß eine "int a;" eben nur eine Deklaration ist, die besagt daß ich mal ein a vom integer Typ benutzen will - und erst mit "a=1;" eine Intialisierung draus wird, die sagt nun laß uns mal konkret bei 1 anfangen mit der a Benutzung.
Für mich war ursprünglich die Initialisierung mit "int a;" abgeschlossen und nun habe ich als Fazit im Lernspeicher: Achtung ist nicht dasselbe.
Zitat:
Zitat von next user Beitrag anzeigen
aber ist ja auch egal...
Speicher kann man auch wieder freigeben, wenn's sein muß ... Schönes Wochenende. AVT
  #7 (permalink)  
Alt 25.03.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

"Speicher kann man auch wieder freigeben, wenn's sein muß ..."

Das ist mir jetzt etwas zu platt. Welchen Speicher meinst Du?
Da wir hier die ganze Zeit um die Deklaration und Initialisierung einer Integer-Variablen geschrieben haben, erklärst Du mal bitte die Freigabe konkret daran.

Danke.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 25.03.18
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Dynamische Speicherverwaltung: new, delete.
Sollte aber nur mit Klassen gehen. Ein einziges int in eine Klasse packen sollte sich nicht lohnen, die 4Byte müsste der RAM verkraften

C$D
  #9 (permalink)  
Alt 25.03.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
Dynamische Speicherverwaltung: new, delete.
Sollte aber nur mit Klassen gehen. Ein einziges int in eine Klasse packen sollte sich nicht lohnen, die 4Byte müsste der RAM verkraften
C$D
Ne, die dynamische Speicherverwaltung kann er nicht meinen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 25.03.18
Premium Mitglied
 
Registriert seit: Jun 2013
Beiträge: 364
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Ein global deklariertes int wie hier lässt sich nicht freigeben, ausser wie genannt es befindet sich in einer dynamischen Struktur wie Klasse oder Array...

Mal davon abgesehen, was sollte der Sinn davon sein, warum sollte man ein einzelnes int mit 4Byte freigeben wollen?
Thema geschlossen

Lesezeichen

Stichworte
compiler fehler, error, fehler, mql4, possible use of uninitialized variable, programmierung, programmierung metatrader, programmierung mql4

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------