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! print ist 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 🙂


Anmelden zum Antworten