g++ 4.0 kompiliert schrott???

Jan-Michael

Aktives Mitglied
Thread Starter
Dabei seit
28.02.2005
Beiträge
397
Reaktionspunkte
0
Hallo Leute,

ich gebe zu, dass der Titel des Threads nicht sehr viel sagt, aber das ist genau das, was ich momentan denke.

Ich arbeite gerade an einem etwas größeren Projekt in C++. An einer Stelle in meinem Code steht in etwa folgendes:

Code:
if(AUSSAGE1 == true) {

  doSomething();

}


Nun wird die Methode doSomething() auch ausgeführt, wenn AUSSAGE1 == false ist. Wie kann das sein??? Zum debuggen habe ich obigen Code ein wenig modifiziert zu folgendem Listing:

Code:
if(AUSSAGE1 == true) {

  doSomething();

  if(AUSSAGE1 == false) cout << "Hello, from doSomething()";

}


wer kann raten, was passiert?? Richtig, ich bekomme auf einmal die Nachricht "Hello, from doSomething()" auf die Konsole geschrieben. Was läuft da schief?? Ist der g++ (Version 4.0) wirklich so schlecht, oder kann ich nicht richtig denken??

Beste Grüße und schonmal danke für eure Hilfe,
Jan-Michael
 
hast Du irgendwelche optimierenden Switches aktiviert?
 
Machen wir eine Wette, dass er einen Tippfehler im Code hat?
 
Wie ist denn true und false von Dir definiert?

Probier es mal mit
Code:
if(AUSSAGE1) {

  doSomething();

  if(!(AUSSAGE1)) cout << "Hello, from doSomething()";

}
 
Machen wir eine Wette, dass er einen Tippfehler im Code hat?

ja sicher! So ein grundlegender Fehler wäre denn doch längst aufgefallen in so renomierten Projekten! Entweder zu tode optimiert, eine Nebenläufigkeit nicht beachtet oder eben ein dezentes sematisches Problemchen.
 
Vielleicht ein "=" statt ein "==" ? Dafür kann man eine Warning anschalten, die mich so manches mal gerettet hat.

Alex
 
Hallo Leute,

ich habe ja mit vielem Gerechnet, aber dass schon Wetten auf meinen Code abgeschlossen werden ^^. Ich muss dazu sagen, dass ich auch nicht der beste C++ Programmierer bin. Deshalb kann es durchaus sein, dass ich Mist programmiert habe. Naja, wie auch immer - hier der originale Code-Schnipsel:

Code:
if(m_conditions[m_conditions.size() - 1]->getExecFlag() == true) {
			
	execSequence();
				
				
	if(m_conditions[m_conditions.size() - 1]->getExecFlag() == false)
				
	   cout << "execFlag::" << m_conditions[m_conditions.size() - 1]->getExecFlag() << std::endl;  //---debug---
				
}

m_conditions ist übrigens ein vector. Mit m_conditions.size() - 1 wollte ich das letzte Element im Vektor ansprechen. Vllt. nicht sehr elegant, aber wie gesagt, ich bin nicht sehr gut in C++.

getExecFlag() gibt einen bool zurück.


Nocheinmal besten Dank für eure Hilfe


PS: Es kann sein, dass der obige Code wirklich ziemlich crappy ist, deshalb hoffe ich, dass ich mich nicht allzusehr blamiere ^^ Achja, bevor ich's vergesse. Zum schreiben hab ich XCode benutzt. Dabei hab ich das Projekt einmal mit der Option Development (also Z Link) sowie mit Deployment kompiliert. Es hat sich jedoch nichts getan.
 
Hi,

lass doch mal das == true ganz weg. In der Regel prüft man so:
Code:
if (condition) {
}
bzw:
Code:
if (!condition) {
}

cu
 
Hallo Leute,

ich habe den Fehler gerade gefunden, als ich noch einmal über den Code geschaut habe .... ich ärgere mich wirklich, dass ich das nicht gesehen habe, aber mein Debugging war schrott. Damit konnte man den Fehler auch nicht finden.

Das Problem war, dass das Flag in der Methode execSequence() verändert wird. Sprich die Methode lieferte true, bevor execSequence() ausgeführt wurde und false danach ^^.

Aber ich danke euch totzdem für eure Bemühungen. Das ist mir jetzt wirklich peinlich ^^ :eek:.
 
Muss dir an sich nicht peinlich sein. Die Foren sind voll von "ICH MACHE ALLES RICHTIG ABER $GROSSESPROJEKTMIT171632876871236872316AUGENDRAUFISRBUGG"-Fehlermeldungen. ;-)

Es gelten eben die Regeln:

1. In 50 % macht man selbst einen Fehler.
2. In den restlichen 50 % von 1 macht man selbst einen Fehler.
3. In den restlichen 50 % von 2 macht man selbst einen Fehler.
4. In den restlichen 50 % von 3 macht man selbst einen Fehler.
5. In den restlichen 50 % von 4 macht man selbst einen Fehler.
6. In den restlichen 50 % von 5 macht man selbst einen Fehler.
7. In den restlichen 50 % von 6 macht man selbst einen Fehler.
8. In den restlichen 50 % von 7 macht man selbst einen Fehler.
9. Die anderen machen den Fehler.

Manchmal kommt man zu 9. Meist meint man das aber nur, obwohl man gerade erst bei 3 war.
 
Zurück
Oben Unten