Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

08.09.2007, 17:02

Entschuldigung... das ist ein Fehler der passiert, wenn man mal kurz mit den Gedanken wo anders ist, wenn man mal etwas ausprobieren will (z.B. ob der Includewächter funktioniert ) und danach klingelt das Telefon und man hat es vergessen...
Es kann mir doch keiner Erzählen, dass Erfafhrung die endgültige Lösung der Tatsache ist, dass Irren menschlich und der Mensch nicht unfehlbar ist.
Solche Fehler finde ich natürlich sofort, wenn ich mir den Code angucke... nur wenn der Code kilometerlang wird, ist so ein Tool doch hilfreich... versteht das denn keiner.

Phili

unregistriert

12

08.09.2007, 17:40

Also, das man seinen Code nicht komplett überblickt kann mal passiern.
Aber ich find, wenn der Code so unübersichtlich ist, das man doppelte includes nicht erkennst, fang ich an mir Sorgen zu machen.
Selbst wenn es ein Programm gäbe das sowas findet, wärs immer noch praktischer es manuell zu machen.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

13

08.09.2007, 17:42

Es gibt für sowas das

Quellcode

1
#pragma_once

wenn ich mich jetzt nicht total irre.

Ich meine mit "Semantische Fehler" logische Fehler ;), die Semantik der Programmiersprache kennt ja der Compiler und meldet sich gleich...

Irren ist menschlich und durch gute Planung zu beseitigen. Deswegen gibt es ja UML und Diagramme damit man sich klar wird, welche Funktionalität eine Klasse haben soll und was man dazu braucht.

Die Includes werden meist schon dazugeneriert, um sowas kümmert sich kein Mensch mehr, ausser es sind irgendwelche speziellen Includes. Und selbst wenn man einige davon nicht mehr braucht (was auf schlechte Planung schließen lässt), dann interessiert das auch keinen weil es 1.) nicht in der Dokumentation erscheint und sich 2.) Nicht auf den Code auswirkt.

Den Nullpointerfehler sollte jeder der etwas Erfahung mit dem Debugger hat in null komma nix finden.

Und alle weiteren Semantischen Fehler findet eh kein Tool der Welt sondern nur ausreichendes Testing.

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

14

08.09.2007, 23:17

Ich finde solche Tools sehr sinnvoll. Auch wenn die Compiler immer mehr Warnungen einbauen, sind sie bei weitem noch nicht an den Tools dran, die extra für den Zweck geschrieben sind. Klar macht man als erfahrenen Programmierer weniger Fehler und findet bei einem 100 oder auch noch 10 000 Zeilen Programm die meisten durch anschauen und evtl einmal im Debugger durchlaufen lassen. Man weiss aber dann auch, dass jeder Fehler macht, auch ganz ab und zu mal dumme, dass bei 100 000 oder 1 000 000 Zeilen oder mehr (aktuelle Spiele) einfach fast jede Fehlerart irgendwo vorkommt, dass gerade C++ als Sprache die Eignschaft hat, viel "Quatsch" zuzulassen, sodass es der Compiler nicht als Fehler markieren DARF.

Hier ein gutes:
www.gimpel.com

Es werden zum Teil auch Fehler gefunden die ich als "Logik Fehler" bezeichnen würde. Ihr könnt ja mal hier rein schauen und testen ob Ihr auch alle Fehler seht, die das Programm anzeigt (nicht spicken!):

http://www.gimpel.com/html/bugs.htm

Es gibt übrigens statische Tools (checken Sourcode) und dynamische (schauen beim Ablauf der Anwendung was passiert, z.B. Speicher überschreiben).
"Games are algorithmic entertainment."

15

09.09.2007, 01:01

Respekt! Gutes Programm! Hab' mal die Demo getestet...
Der Vorschlag mit dem "const" und der Fehler in der throw-list hat mich besonders beeindruckt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
     1 class Typ
     2 {
     3 public:
     4     void Methode() {}
     5     void SchmeissNix() throw();
     6 };
     7 
     8 void Typ::SchmeissNix()
     9 {
    10     throw int(5);
    11 }
    12 
    13 int main()
    14 {
    15     Typ *Objekt = 0;
    16     Objekt->Methode();
    17     return 0;
    18 }

Output

FlexeLint for C/C++ (Unix) Vers. 8.00u, Copyright Gimpel Software 1985-2006

--- Module:   simple.cpp (C++)
                    _
    void Methode() {}
simple.cpp  4  Info 1762: Member function 'Typ::Methode(void)'
    could be made const
_
{
simple.cpp  9  Warning 1548: Exception specification for
    'Typ::SchmeissNix(void)' conflicts with line 5
simple.cpp  5  Info 830: Location cited in prior message
                _
    throw int(5);
simple.cpp  10  Warning 1549: exception 'const int' not in
    throw-list of function 'Typ::SchmeissNix(void)'
_
}
simple.cpp  11  Info 1762: Member function 'Typ::SchmeissNix(void)'
    could be made const
                     _
    Objekt->Methode();
simple.cpp  16  Warning 413: Likely use of null pointer 'Objekt'
    in left argument to operator '->' [Reference: file simple.cpp:
    line 15]
simple.cpp  15  Info 831: Reference cited in prior message
            _
}

simple.cpp  18  Info 783: Line does not end with new-line

--- Global Wrap-up

Info 1714: Member function 'Typ::SchmeissNix(void)' (line 8, file
    simple.cpp) not referenced
simple.cpp  8  Info 830: Location cited in prior message


Aber die Preise :-(

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

16

09.09.2007, 01:36

Ja, billig sind die Teile wirklich nicht :(.

Hier noch etwas was moderne Tools könnne. Dieser Code wird nicht angemekert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
  int a = BerechneA();
  CStern *pStern;

  if ( a < 0)
    pStern = pMond;
  if(a >= 0)
    pStern = pSonne;

  pStern->Zeichne();


während dieser hier falsch ist und angemekert werden sollte ("Use of possibly undefined pointer" oder so):


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
  int a = BerechneA();
  CStern *pStern;

  if ( a < 0)
    pStern = pMond;
  a = BerechneANochmal();
  if(a >= 0)
    pStern = pSonne;

  pStern->Zeichne();
"Games are algorithmic entertainment."

Sicaine

unregistriert

17

09.09.2007, 02:43

Ich weis garnich warum ihr alle so negativ gegen solche Analyser eingestellt seid. Sowas ist auch bei Java gang und gaebe! Hier sind die Tools bzw. Eclipseplugins allerdings for free. Diese Plugins(jetzt von Seiten Java) erkennen z.B. wenn Codeteile kopiert wurden und man aus Faulheit frueher die debugausgaben etc. nicht angepast hat. Oder wenn wo eine Variable ueberprueft wird, die schon ueberprueft wurde etc. etc. Tipps die zwar ein guter programmierer sowieso schreiben sollte aber die man halt nun mal nicht immer einhaeult.

Fuer C++ kann ich dir tobb leider nicht weiterhelfen.

18

09.09.2007, 11:46

hm schade... ich habe bis jetzt auch noch keine günstiges oder opensource c++ analyse programm gefunden...

Werbeanzeige