Int variable einen float/double zuweisen -> generell double verwenden?



  • Hi Leute,
    ich lerne gerade C++ und habe bereits Erfahrungen in C#. Ich verwende MinGW und momentan Notepad++ für meine Programme.

    Ich wurde in C# ziemlich verwöhnt, weil der Compiler ständig meckerte, wenn ich einer Int Variable einen Float/Double zuweisen wollte:

    int a;
    float b= 1.234;
    a=b;
    

    Das war in C# nicht möglich. In C/C++ gibts dazu keine Fehlermeldung, es wird einfach alles hinterm Komma vernachlässigt.

    Ein ähnliches Beispiel bezieht sich auf unsigned Variablen.

    int i = 5;
    int j = 6;
    unsigned int k = i-j;
    

    Auch das ist möglich, jedoch wird irgendeine andere Zahl ausgegeben.

    Ich bin mir sicher, dass es noch viele andere Beispiele gibt, in denen der Compiler recht großzügig ist.

    Für mich als Elektrotechniker, der relativ viel Mathematik in seinen Programmen verwenden will (Lösung von Gleichungssystemen, numerische Integration etc.) ist das in meinen Augen ein Genickbruch bzw. ein großes Problem, weil sich so sehr schnell sehr viele Fehler einschleichen können.

    Gibt es diesbezüglich Tipps von erfahreneren Leuten, wie man solche Fehlerquellen reduzieren kann? Mir fällt momentan nur ein, verstärkt darauf zu achten, alle Variablen als double zu deklarieren und int Variablen nur für for Schleifen zu verwenden.

    Aber, wenn ich mal gepennt und eine Variable als int deklariert habe, wie kann ich diesen Fehler am besten/schnellsten finden?

    Auch hier hat die IDE von Microsoft (Visual STudio Express) einen hervorragenden Debugger, in dem ich das Programm schrittweise durchlaufen und mir die gewünschten Variablen genau angucken kann.

    In Notepad++ in Verbindung mit dem Compiler habe ich derartiges nicht finden können. Möglicherweise mache ich auch etwas generell falsch?

    Ich verwende Notepad++ mit MinGW wie folgt:
    Ich schreibe mein Programm in Notepad++ und speichere es als .cpp ab. Ich öffne die Console und führe den Befehl

    g++ hello.cpp -o hello.exe
    

    aus, um eine Exe Datei zu erhalten.
    Ich führe die Exe Datei in der Console aus.

    Wie kann ich hier gezielt schrittweise debuggen?

    Oder muss ich für diese Wünsche explizit auf Eclipse/CodeBlocks/DevCpp umsteigen?

    Fragen über Fragen eines (Semi) Anfängers, der sich zu viele Gedanken im Vorfeld macht.

    Vielen Dank an alle, die sich die Zeit nehmen, mir zu antworten.

    Gruß
    al3ko



  • 1. Du programmierst C++, nicht C++/CLI.
    2. Visual Studio gibts auch für C++ (und auch hier ne kostenlose Express Edition).
    3. Ich sehe ehrlich gesagt nicht, wo große Probleme auftreten sollten. Wenn ich eine Fließkommazahl a einer anderen Variable b zuweise und ich will nicht, dass die Nachkommastellen abgeschnitten werden, muss b doch schon semantisch derart ausgelegt sein, dass es Nachkommastellen geben kann. Deshalb muss b doch schon eine Fließkommazahl sein.
    4. Bei dem signed-unsigned-Beispiel, das du gegeben hast, wirst du von allen gängigen Compilern in einer geeigneten Warnstufe gewarnt. Aber auch dieses Beispiel halte ich eher für konstruiert, denn wenn eine Variable eine Differenz halten soll, mache ich diese nicht unsigned.



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Normalerweise kompillier ich mit diesen Optionen:

    g++ -Wextra -Wall -pedantic-errors hello.cpp -o hello.exe
    

Anmelden zum Antworten