Forum: Compiler & IDEs Problem mit Optimierung?


von lugge (Gast)


Lesenswert?

Hallo,

ich bastl gerade unter Kubuntu 11.10 und aktuellem gcc mittels 
Eclipse_CDT an einem kleinen Programm.

Ich lese eine Textdatei mittels fgets() aus.
In meinen Textdateien steht in der ersten Zeile immer eine Zahl, danach 
folgen in den restlichen Zeilen irgendwelche Daten.

Da ich die Zahl extra brauche lese ich diese aus und speichere sie ab, 
die restlichen Zeilen lese ich in einer while-Schleife aus.

So lese ich meine Zahl aus:

count = atoi(fgets(lineBuffer, 4, file)+2);


Da ich count momentan zwar speichere, aber noch nicht weiter verwende 
optimiert mir der gcc die Zeile (wahrscheinlich) weg. Das führt dazu 
dass ich in meiner Schleife später dieselbe Zeile "nochmal" auslese.

Schreibe ich stattdessen:

count = atoi(fgets(lineBuffer, 4, file)+2);
printf("%d", count);

funktioniert alles prima. count wird benutzt, deswegen darf gcc nichts 
optimieren.

Ich will aber nicht dass er mir diese Zeile streicht!

In Eclipse hab ich unter 
Properties/c_c++_build/setting/gcc_compiler/optimization bereits auf 
"none" (-O0) gestellt.
Bringt leider nichts. Ohne die printf-Zeile bekomm ich diese Zeile immer 
in meiner Schleife ausgelesen, was nur bedeuten kann dass der Compiler 
hier immer noch was optimiert.

Habt ihr da ne Idee?

Viele Grüße,
lugge

von Karl H. (kbuchegg)


Lesenswert?

lugge schrieb:

> Habt ihr da ne Idee?

Schreibs nicht gar so dicht gedrängt

   fgets(lineBuffer, 4, file);
   count = atoi( lineBuffer ) + 2;

das gibt dir dann auch Gelegenheit, den Returncode von fgets zu testen.

Ansonsten: Zeig mehr Code.
Der Compiler darf den Funktionsaufruf nicht wegoptimieren. Möglich, dass 
der Optimizer da einen Fehler hat, aber so recht glaub ich da nicht 
daran.

von lugge (Gast)


Lesenswert?

Sorry für den falschen Alarm, das Problem hat sich erledigt, er hat 
nichts wegoptimiert.

An was genau lag weis ich nicht, aber das spiel ich grad durch.

Der gcc war auf Jeden unschuldig :-)

Grüße,
lugge

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.