ubuntuusers.de

[gelöst] Schweres Debugging

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

blackbird Team-Icon

Avatar von blackbird

Anmeldungsdatum:
19. November 2004

Beiträge: 3397

Wohnort: Hermagor, Kärnten - Österreich

#include <iostream>
#include <sstream>
#include <string>
#define START {
#define ENDE }
#define SOLANGE while
#define WENN if
#define GIB_ZURUECK
#define NICHT_ENDE !cin.eof()
#define KEIN_FEHLER !cin.fail()
#define KLAMMER_AUF (
#define KLAMMER_ZU )
#define STRICHPUNKT ;
#define BEISTRICH ,
#define GLEICH ==
#define DEFINIERE_ALS =
#define PLUS +
#define MINUS -
#define MAL *
#define GETEILT_DURCH /
#define GANZZAHL int
#define AUSGABE <<
#define EINGABE >>
#define BENUTZE using
#define NAMENSBEREICH namespace

BENUTZE NAMENSBEREICH std STRICHPUNKT

GANZZAHL accumulator DEFINIERE_ALS 0 STRICHPUNKT

GANZZAHL do_token KLAMMER_AUF string str KLAMMER_ZU
START
    GANZZAHL result STRICHPUNKT
    WENN KLAMMER_AUF str GLEICH "A" KLAMMER_ZU START
        GIB_ZURUECK accumulator STRICHPUNKT
    ENDE
    stringstream str_stream STRICHPUNKT
    str_stream AUSGABE str STRICHPUNKT
    str_stream EINGABE result STRICHPUNKT
    GIB_ZURUECK result STRICHPUNKT
ENDE

GANZZAHL main KLAMMER_AUF KLAMMER_ZU
START
    GANZZAHL lt BEISTRICH rt STRICHPUNKT
    string op BEISTRICH str_lt BEISTRICH str_rt STRICHPUNKT
    
    SOLANGE KLAMMER_AUF NICHT_ENDE KLAMMER_ZU START
        cin EINGABE op EINGABE str_lt EINGABE str_rt STRICHPUNKT
        WENN KLAMMER_AUF KEIN_FEHLER KLAMMER_ZU START
            lt DEFINIERE_ALS do_token KLAMMER_AUF str_lt KLAMMER_ZU STRICHPUNKT
            rt DEFINIERE_ALS do_token KLAMMER_AUF str_rt KLAMMER_ZU STRICHPUNKT
            WENN KLAMMER_AUF op GLEICH "ADD" KLAMMER_ZU accumulator DEFINIERE_ALS lt PLUS rt STRICHPUNKT
            WENN KLAMMER_AUF op GLEICH "SUB" KLAMMER_ZU accumulator DEFINIERE_ALS lt MINUS rt STRICHPUNKT
            WENN KLAMMER_AUF op GLEICH "MUL" KLAMMER_ZU accumulator DEFINIERE_ALS lt MAL rt STRICHPUNKT
            WENN KLAMMER_AUF op GLEICH "DIV" KLAMMER_ZU accumulator DEFINIERE_ALS lt GETEILT_DURCH rt STRICHPUNKT
        ENDE
    ENDE
    cout AUSGABE "Stand des Akkumulators: " AUSGABE accumulator AUSGABE "\n" STRICHPUNKT
    GIB_ZURUECK 0 STRICHPUNKT
ENDE


Was läuft hier falsch?
Es compiliert, aber er will nicht rechnen...

(ja, diese Frage ist ernst gemeint)
ps.: Das ist C++

Bearbeitet von dusselmann:

Thread als gelöst markiert..

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6519

Wohnort: Hamburg

diese Frage ist ernst gemeint

Trotzdem kann ich mir nicht verkneifen zu sagen, das es für mich aussieht wie COBOL auf deutsch. 🙄

Ich bin mit C/C++ bei Linux noch nicht so fit, aber vielleicht gibt es eine Möglichkeit sich ertstmal den Preprozessor Output anzusehen.

Dakuan

blackbird Team-Icon

(Themenstarter)
Avatar von blackbird

Anmeldungsdatum:
19. November 2004

Beiträge: 3397

Wohnort: Hermagor, Kärnten - Österreich

Dakuan hat geschrieben:

Ich bin mit C/C++ bei Linux noch nicht so fit, aber vielleicht gibt es eine Möglichkeit sich ertstmal den Preprozessor Output anzusehen.

Dakuan

Der Tipp war Gold wert:

blackbird@activetravel:~/Developement/cpp_tests$ g++ -E no_assambler.cc | tail -n 20 | less

Und der Fehler lag GIB_ZUREUCK

#define GIB_ZURUECK return


sollte es natürlich heißen

bitbieger

Avatar von bitbieger

Anmeldungsdatum:
24. Januar 2005

Beiträge: 85

Wohnort: NRW

Mann, muss dir langweilig sein ... versuch dich doch mal im Sockenstricken 😀

Apollon

Avatar von Apollon

Anmeldungsdatum:
27. Oktober 2004

Beiträge: 724

Wohnort: Darmstadt

Das dachte ich eben auch. ☺

hssealex

Anmeldungsdatum:
5. Juli 2005

Beiträge: Zähle...

Wohnort: Österreich

Ich habe noch nie so ein c++ Programm gesehen!
Problem 1 bei der Verwendung von #define : Der Compiler zeigt den Fehler nicht dort an, wo er wirklich ist!
Problem 2 Es wird sehr schnell unübersichtlich mit der Klammersetzung
Problem 3 Das Debuggen: Ich kenne keinen Debugger der duch PreProzessor mit dem Pfeil während des schrittweisen Ausführens mitspringt!!

Problembeispiel

#define QUAD(x) x*x

double ergebnis = y/Quad(x); // Ergebnis ist y!!!

// besser
#define QUAD2(x) (x*x)

ergebnis = y/Quad2(x)

Mit Preprocessoranwiesungen programmiert man in C++ nicht, man benötigt sie zum zusammenfügen von Modulen,
zum Einstellen des Compilers, wenn man plattformübergreifend programmiert,...
#define linux
#ifdef linux[syntax="cpp"]Text[/syntax]
#define SHOWDIR ls
....

mfg
Alexander Lindert

Apollon

Avatar von Apollon

Anmeldungsdatum:
27. Oktober 2004

Beiträge: 724

Wohnort: Darmstadt

hssealex hat geschrieben:

// besser
#define QUAD2(x) (x*x)

Noch besser sind natuerlich Template-Funktionen. Und wenn man sie auch noch inlined, dann erspart man auch ein Funktionsaufruf.

Schachmatt fuer #define.

blackbird Team-Icon

(Themenstarter)
Avatar von blackbird

Anmeldungsdatum:
19. November 2004

Beiträge: 3397

Wohnort: Hermagor, Kärnten - Österreich

hssealex hat geschrieben:

...

ähm. du meinst ja nicht ernsthaft, dass ich das ernst gemeint habe oder 😲

Antworten |