Ein Problem



  • Jens_König schrieb:

    Trotzdem sollte man die std:: Version verwenden, da alles globale im Normalfall böse ist 😃 . Desweiteren bieten die meisten IDEs Codevervollständigungen über std:: an, so das man weniger Syntaxfehler macht.

    🙄



  • ups



  • Jens_König schrieb:

    Trotzdem sollte man die std:: Version verwenden, da alles globale im Normalfall böse ist 😃 . Desweiteren bieten die meisten IDEs Codevervollständigungen über std:: an, so das man weniger Syntaxfehler macht.

    using namespace sollte man in Header-Dateien unterlassen, in Implementierungsdateien ist das kein Problem. Da hast du also wohl was durcheinander gebracht.



  • Ich finde, "using namespace" ist ein Fehlkonstrukt von C++. Im Header sollte man das aus gutem Grund unterlassen. Da muß ich voll qualifizierte Namen angeben. In der Implementierungsdatei dann nicht mehr? Ich bevorzuge den gleichen Programmierstiel in der Header- und Implementierungsdatei. Es ist doch nicht verkehrt, an der Stelle, wo man ein Symbol verwendet, auch anzugeben, wo es her kommt. Schaut euch mal folgenden Beispielcode an:

    #include <header_a.h>
    #include <header_b.h>
    #include <header_c.h>
    #include <header_d.h>
    
    using namespace a;  // importiere Symbole aus header_a.h
    using namespace b;  // importiere Symbole aus header_b.h
    using namespace c;  // importiere Symbole aus header_c.h
    using namespace d;  // importiere Symbole aus header_d.h
    
    int main()
    {
      irgendeineFunktion();
    }
    

    Wo gehört denn jetzt irgendeineFunktion hin? In welchem Header finde ich die Definition? Klarer wird es one dieses "using namespace":

    #include <header_a.h>
    #include <header_b.h>
    #include <header_c.h>
    #include <header_d.h>
    
    int main()
    {
      c::irgendeineFunktion();
    }
    

    Jetzt sollte es klar sein, wo das zu finden ist. Es steigert einfach die Lesbarkeit.

    Ein weiteres Argument ist, daß "using namespace" das ganze Konzept der Namespaces auflöst. Eigentlich ist der Namespace dazu gedacht, Namensräume zu trennen. Und mit "using namespace" vermische ich sie wieder 😞 Warum habe ich sie dann überhaupt getrennt? Warum ist die Standard-Bibliothek dann überhaupt in das Namespace std gewandert?

    Gruß

    Tntnet



  • Hallo,

    Übertreibs mal nicht. Ich finde das eigentlich ganz gut so mit den using namspace. Das spart doch viel Tipparbeit. Falls doch mal eine Mehrdeutigkeit auftreten sollte, kann man ja den Namespace trotzdem noch angeben. In deinem Beispiel

    #include <header_a.h>
    #include <header_b.h>
    #include <header_c.h>
    #include <header_d.h>
    
    using namespace a;  // importiere Symbole aus header_a.h
    using namespace b;  // importiere Symbole aus header_b.h
    using namespace c;  // importiere Symbole aus header_c.h
    using namespace d;  // importiere Symbole aus header_d.h
    
    int main()
    {
      c::irgendeineFunktion();
    }
    

    Geht doch auch.



  • T4D3U5 schrieb:

    #include <iostream.h>
    void main()
    {
    // Dies ist das Hello-World-Programm
    cout<<"Hello, world!"<<endl;
    };

    void main() ist auch nicht Conform, es muss entweder int main() oder *int main( int argc, char *argv ) heissen.

    grüße



  • Wo gehört denn jetzt irgendeineFunktion hin?

    Rechte Maustaste->Go To Declaration. Solange die Funktion für den Compiler eindeutig ist, ist sie das in der Regel auch für jede vernünftige Entwicklungsumgebung. Und es zwingt dich ja keiner mit Notepad zu entwickeln.

    Mal davon abgesehen: eine cpp-Datei ist aus Sicht des Compilers eine geschlossene Einheit, die von allen anderen Übersetzungseinheiten unabhängig ist. Insofern ist es schlicht persönliche Geschmackssache/firmeninterne Konventionssache ob und wie man Namespaces in cpp-Dateien öffnet. Technische Vor-/Nachteile gibt es hier eigentlich nicht. Bei Headern hingegen gibt es handfeste Gründe gegen jede using-Direktive bzw. using-Deklaration.



  • Braunstein schrieb:

    Hallo,

    Übertreibs mal nicht. Ich finde das eigentlich ganz gut so mit den using namspace. Das spart doch viel Tipparbeit.

    Mit der Lesbarkeit kann man nicht übertreiben. Weniger Tipparbeit ist da keine Ausrede. Oder verwendest Du grundsätzlich Bezeichner mit maximal 2 Buchstaben? Das spart doch Tipparbeit. Und mit Leerraum sollte man dann auch noch sparsam umgehen. Die Leer- und Returntasten sind sowieso so strapaziert.

    Tschuldigung - ich glaube jetzt habe ich mich ein wenig zu viel rein gesteigert. Ich habe mich nun mal irgendwann für diesen Stiel entschieden und finde, daß er sich sehr bewährt hat. Ich bekomme immer wieder Resonanz, daß mein Code trotz sparsamer Kommentare gut verständlich ist.

    Du findest Beispiele für meinen Stil auf meiner Homepage http://www.tntnet.org/.

    Gruß

    Tommi



  • Dagegen ist auch nichts zu sagen. Da hat eben jeder seinen eigenen Stil.
    Ich öffne ja auch nicht immer alle Namensräume, sondern nur die, dessen Funktionen bzw. Typen ich sehr häufig verwende (z.Bsp. std).
    Außerdem versuche ich eigentlich schon instinktiv das Überschreiben von im std deklarierten Bezeichnern zu vermeiden.



  • Sodela noch mal kurz von mir was.

    Ich bevorzuge überall die std:: Version, da sie imho weniger Zeit in Anspruch nimmt. Durch die Codevervollständigung z.B. bei express, hab ich eine viel kürzerer Fehlersuchzeit.


Anmelden zum Antworten