Nur den Dateinamen loggen

Letzte Änderung: 30.10.2017

Beim Logging ist die Stelle im Quellcode eine wichtige Information. In C/C++ gibt es daher die folgenden vordefinierten Makros.

  • __FILE__ - Pfad und Dateiname
  • __LINE__ - Zeilennummer

Bei langen Pfaden stört dieser leider.

Um nur den Dateinamen zu erhalten, sind folgende Schritte notwendig

In der CMakeLists.txt den Dateiname als zusätzliches Makro angeben.

# Pure filename as macro TTN_FILE
# Unix only!
set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -DTTN_FILENAME=\"`basename $<`\"")

Im Header sind einige Makros zu definieren:

//! Token stringification
#undef TTN_XSTR
#undef TTN_STR
#define TTN_XSTR(x) TTN_STR(x)
#define TTN_STR(x) #x

//! Simple log to stdout
#define TTNLOG(...) \
    do { \
        printf("%s:%i ", TTN_XSTR(TTN_FILENAME), \_\_LINE\_\_); printf(\_\_VA_ARGS\_\_);  printf("\n");v\
    } while(false);

Die Verwendung sieht dann so aus:

TTNLOG("Test the log for int. i=%i", 3);

… und die Ausgabe

testttnlog.cpp:25 Test the log for int. i=3




© 2003-2017 th-thielemann.de