cerr oder doch cout
-
const int NULL = 0 ; // Weil Stroustrup es so willif ( pointer == NULL ) cerr << "FAIL" << endl ;if ( pointer == NULL ) cout << "FAIL" << endl ;Welche Methode bevorzugt ihr? Ich verstehe die Trennung überhaupt nicht.
Landen sowieso nicht alle Ausgaben auf der Konsole ( stdout ) ?
Oder gibt es einen guten Grund Fehlerausgaben auf stderr umzuleiten?
-
Bjarn´s Cousin 123213213° schrieb:
const int NULL = 0 ; // Weil Stroustrup es so willif ( pointer == NULL ) cerr << "FAIL" << endl ;if ( pointer == NULL ) cout << "FAIL" << endl ;Welche Methode bevorzugt ihr? Ich verstehe die Trennung überhaupt nicht.
Landen sowieso nicht alle Ausgaben auf der Konsole ( stdout ) ?
Oder gibt es einen guten Grund Fehlerausgaben auf stderr umzuleiten?Im Gegensatz zu
std::coutbesitz std::cerr keinen Puffer. Es wird also nicht "gewartet" bis der Puffer voll genug ist sondern sofort auf die Konsole geschrieben. Das kann bei Fehlermeldungen entscheidend sein.Stell dir vor dein Programm erkennt einen Fehler und schreibt ihn nicht, weil der Puffer in dem Moment nicht voll genug ist. Bei
std::cerrkann das nicht passieren, da eben sofort geschrieben wird.
-
sehr gut !
danke für die antwort!
-
Bjarn´s Cousin 123213213° schrieb:
const int NULL = 0 ; // Weil Stroustrup es so willDu weisst aber, dass es in der Standardbibliothek ein Makro
NULLgibt? Und ich habe gedacht, Stroustrup schreibt lieber 0 stattNULL...
-
Nexus schrieb:
Bjarn´s Cousin 123213213° schrieb:
const int NULL = 0 ; // Weil Stroustrup es so willDu weisst aber, dass es in der Standardbibliothek ein Makro
NULLgibt? Und ich habe gedacht, Stroustrup schreibt lieber 0 stattNULL...
In "C++ the programming language" steht, dass die Verwendung von dem Makro NULL unschön ist.
-
Bjarn´s Cousin 123213213° schrieb:
Nexus schrieb:
Bjarn´s Cousin 123213213° schrieb:
const int NULL = 0 ; // Weil Stroustrup es so willDu weisst aber, dass es in der Standardbibliothek ein Makro
NULLgibt? Und ich habe gedacht, Stroustrup schreibt lieber 0 stattNULL...
In "C++ the programming language" steht, dass die Verwendung von dem Makro NULL unschön ist.
Sich dieses NULL aber "nachzubauen" ist alles andere als sinnvoll. Es kann sogar zu Problem führen, da es als Makro schon existiert.
dann müsstest du schon schreiben:
#ifdef NULL #undef NULL #endif const int NULL = 0;Sonst passierts dir vielleicht, dass der Präprozessor daraus etwas ähnliches wie macht:
const int (void *) 0 = 0;
-
Oh, das wusste ich garnicht, dass bet cout erst gewartet wird. Deswegen will mir das bei linux nicht immer raus o.o thanks
-
Bjarn´s Cousin 123213213° schrieb:
Oder gibt es einen guten Grund Fehlerausgaben auf stderr umzuleiten?
Wenn andere Programme dein Programm als Prozess starten können sie error und out streams unterschiedlich einlesen und wissen, ob dein Programm nen Error oder ne normale Ausgabe gemacht hat, ohne dass sie den Text verstehen müssen.
-
Zum Thema "Ein-/Ausgaben umleiten" bzw. kurz "Piping" hier noch ein Link (die Operatoren funktionieren auch in einer DOS-Box):
http://www.selflinux.org/selflinux/html/bash_basic03.html#d25e453Man kann dann also cout- und cerr-Ausgaben getrennt behandeln (auch wenn standardmäßig cerr-Ausgaben auch direkt auf die Konsole geschickt werden).
-
lk schrieb:
Oh, das wusste ich garnicht, dass bet cout erst gewartet wird. Deswegen will mir das bei linux nicht immer raus o.o thanks
Übrigens gibt
std::endlnicht nur einen Zeilenumbruch aus, sondern leert auch den Puffer. Schreibst du also:std::cout << "blub" << std::endl;Dann sollte die Ausgabe auch erscheinen.