Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Die schönsten Schüße ins Bein...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.06.2003, 13:02 Uhr
virtual
Sexiest Bit alive
(Operator)


... und ihre Lösung/prävention:
Vielleicht fällt Euch was zu diesem Thema ein (also wie kann man den Code gestalten, um Fehler zu vermeiden).
Ich mach mal den Anfang:

C++:
FILE* logfile = fopen("datei.log", "a");
if (logfile = NULL)
{
    fprintf(stderr, "Kann logdatei nicht öffnen!\n");
}


Man bekommt immer die Fehlermeldung, daß die Datei nicht geöffnet werden konnte.
<edit Nach berechtigtem Einwand von ao: Man bekommt nie eine Fehlermeldung, aber mit dem Schreiben ins Log funktionnokkelt es dennoch nicht />
Manche Kompiler warnen, andere nicht. Das Problem ist, daß hier ein Tipfehler vorligt und in der IF-Bedingung nur ein "=" an Stelle von "==" steht.
Prävention: Vertausche logfile und NULL, dann muß der compiler einen Fehler machen und man sieht das Problem sofort:

C++:
FILE* logfile = fopen("datei.log", "a");
if (NULL = logfile) // Compiler muß hier einen Error machen, weil NULL kein lvalue.
{
    fprintf(stderr, "Kann logdatei nicht öffnen!\n");
}


Prävention gegen solche Tipfehler: Schreibe in Vergleiche wenn möglich auf die Linke seite einen R-Value.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 24.06.2003 um 13:13 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.06.2003, 13:05 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


gehört das nicht in die FAQ?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.06.2003, 13:08 Uhr
ao

(Operator)



Zitat:
virtual postete

C++:
FILE* logfile = fopen("datei.log", "a");
if (logfile = NULL)
{
    fprintf(stderr, "Kann logdatei nicht öffnen!\n");
}


Man bekommt immer die Fehlermeldung, daß die Datei nicht geöffnet werden konnte.

Leider eben nicht. Da nach der (unfreiwilligen) Zuweisung logfile den Wert NULL hat, schlägt der Vergleich if (NULL) fehl und das Programm läuft hinter der Abfrage weiter und benutzt logfile, als wäre alles klar.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.06.2003, 13:11 Uhr
virtual
Sexiest Bit alive
(Operator)


@flosoft
Vielleicht finden andere ja auch noch was. Wart bitte was mit dem Verschieben.

@ao
Hast natürlich recht. Das Problem bleibt aber das gleiche: Compiler erkennt den tipfehler nicht als error...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.06.2003, 20:11 Uhr
Alf



Hy!

Naja ich bin zum Beispiel mal an einem fehlenden Semikolon hinter einer Klassen Deklaration fast verzweifelt. Mein Compiler meldet da so ziemlich alles nur nicht das ein Semikolon fehlt.

Hm...
Mall für ne Minute rumgesponnen.

Wie wäre es mit einem Quell-Text analysierer unter Downloads der solche Stellen anmahnt . Das könnte vielleicht einige Post´s "wo ist der Fehler“ vermeiden.

Da fallen mir noch viele dinge ein wie new / delete (delete[])
u.s.w.
--
Mfg

Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.06.2003, 22:25 Uhr
Hans
Library Walker
(Operator)



Zitat:
Alf postete
Hy!

Hm...
Mall für ne Minute rumgesponnen.

Wie wäre es mit einem Quell-Text analysierer unter Downloads der solche Stellen anmahnt . Das könnte vielleicht einige Post´s "wo ist der Fehler“ vermeiden.

Da fallen mir noch viele dinge ein wie new / delete (delete[])
u.s.w.

Hi,

also soweit wie ich das sehe, ist dafür ja schon ein halber Quelltextparser erforderlich, der neben der Syntax auch noch einen Teil der Semantik checkt... - nee Moment... das ist wahrscheinlich schon ein ganzer Parser. Also eher ein Vorschlag für die Projekte-Abteilung.

Aber sowas gibt es auch schon, ist nur leider ziemlich teuer. Nennt sich lint, und ist ein Programmpaket, das genau das tut: Syntax und Semantikfehler suchen. Ob es in der OpenSource-Szene auch was in der Richtung gibt, weis ich nicht, kann mir aber gut Vorstellen, das dem so ist.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 24.06.2003 um 22:30 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: