Problem mit Optimierung?

Gast #2531924
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
#2531932
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.
Gast #2531998
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.