__FILE__<<__LINE__ in string transferieren
-
Hallo,
um meinen Debug-Output code zu komplettieren, würde ich gerne file, line und function informationen mit ausgeben.
Ich definiere mir ein par short-hands:#ifndef __FUNCTION__ #define __FUNCTION__ " " #endif #ifndef __FILE__ #define __FILE__ " " #endif #ifndef __LINE__ #define __LINE__ " " #endif #ifndef __LPF__ //long pretty information about function #define __LPF__ __FILE__<<"\n"<<"Line:"<<__LINE__<<":"<<__FUNCTION__<<"\n" #endif #ifndef __SPF__ //short pretty information about function #define __SPF__ __FUNCTION__<<" in line "<<__LINE__ #endif #ifndef __F__ //short for function #define __F__ __FUNCTION__ #endif
jetzt kann ich mittels
wcout <<"INFO: " << __LPF__ <<endl;
Detailinformationen rausschreiben.
Gibt es eine Möglichkeit __LPF__ in einen wstring überzuführen?
Ich könnte dann das ergebnis an eine methode übergeben.
ICh habe ein parr tools, die in einem bestimmten format information in verschiedene files schreiben (z.b: log, info). wenn ich nun __LPF__ als argument beim aufruf mit übergeben könnte, könnte ich die die info, logfile gleich mit hinweisen zu zeilennummern etc. versehen.Danke
alex
-
AbsoluteBeginner_ schrieb:
Gibt es eine Möglichkeit __LPF__ in einen wstring überzuführen?
Ja, mit stringstreams.
Übrigens sind Bezeichner mit zwei Unterstrichen im Namen, und solche mit einem Unterstrich am Anfang, für den Compiler reserviert.
-
Danke für den Hinweis aud die stringstreams, und auf die unterstriche, werde dies ändern.
-
Es geht auch ohne Laufzeitkosten (ich glaub nicht das Compiler Stringstream Operationen mit Konstanten wegoptimieren können):
#include <iostream> // _m_str macht den inhalt eines macros zu einem string #define _m_str_(a) #a #define _m_str(a) _m_str_(a) // _m_cat verbindet 2 code stücke (mit macro expansion) #define _m_cat_(a,b) a##b #define _m_cat(a,b) _m_cat_(a,b) // wchar_t formen von __FUNCTION, __LINE__ und __FILE #define W_FUNC _m_cat(L,__FUNCTION__) #define W_LINE _m_cat(L,_m_str(__LINE__)) #define W_FILE _m_cat(L,__FILE__) // zusammengesetzt #define W_PRETTY W_FILE L"\nLine:" W_LINE L":" W_FUNC L"\n" #define W_PRETTY_SHORT W_FUNC L" in line " W_LINE int main(int argc, char **argv) { std::wcout << W_PRETTY << std::endl; std::wcout << W_PRETTY_SHORT << std::endl; return 0; }
-
... damit mir sowas nicht wieder passiert:
wo finde ich denn eine übesicht bzgl. geschützer namen/bezeichner?danke alex
-
@DerKuchen:
Super! Vielen Dank für das ausführliche Beispiel!
Ist schon 'eingebaut'.Grüße
Alex
-
AbsoluteBeginner_ schrieb:
... damit mir sowas nicht wieder passiert:
wo finde ich denn eine übesicht bzgl. geschützer namen/bezeichner?C++ Standard, Kapitel 2, inklusive der dortigen Verweise auf die anderen Kapitel. Besonders 2.10 und 2.11.