In einem #define auf die Textzeile zugreifen
-
Hallo
Ich nutze zum Debuggen ein einfaches Define (das mit ein netter Mensch aus dem Forum hier gezeigt hat):
#define print(x) cout << #x << "=" << x << endl;
Dieses würde ich gerne dahingehend erweitern, dass mir auch noch die Zeile angezeigt wird, in der ein print(foo) aufruf steht. Da das #define nur eine StringOperation vom Preprocessor ist, müsste der doch eigentlich noch direkt auf der originalen .cpp-Datei arbeiten, so dass es eigentlich auch möglich sein müsste, auf die entsprechende Zeilennummer zuzugreifen.
Weiss jemand ob (und möglichlist auch wie) so was geht?Nikolas
-
Mal ganz ohne überlegen, geht nicht schon
#define print(x) cout << "Zeile " << __LINE__ << ':' << #x << "=" << x << endl;
-
#define print(x) std::cout << #x << "=" << x << " (Zeile " << __LINE__ << " aus " << __FILE__ << ")" << std::endl;Und qualifiziere die Bezeichner mit
std::, wenn es sich um sowas Allgemeingültiges wie das Debug-Makro handelt!printist ausserdem ein schlecht gewählter Name, weil es sehr wahrscheinlich ist, dass er sonst irgendwo verwendet wird. Bei Makros musst du besonders aufpassen, weil sie keinen Scope berücksichtigen.
-
Nexus schrieb:
Und qualifiziere die Bezeichner mit
std::, wenn es sich um sowas Allgemeingültiges wie das Debug-Makro handelt!Autsch. Ja, hast recht, das geht gar nicht.
-
Optimal, vielen Dank euch beiden
