fork download
  1. // basename.h
  2. #include <string.h>
  3.  
  4. static size_t basename_start_calc(const char* filename)
  5. {
  6. const char* base = strrchr(filename, '/');
  7. return base ? (base - filename + 1) : 0;
  8. }
  9. static inline size_t basename_start(const char* filename)
  10. {
  11. static size_t retval = basename_start_calc(filename);
  12. return retval;
  13. }
  14. #define STR_(t) #t
  15. #define STR(t) STR_(t)
  16. #define BASENAME() ((__FILE__ ":" STR(__LINE__)) + basename_start(__FILE__))
  17.  
  18. #include <stdio.h>
  19.  
  20. #undef __FILE__
  21. #define __FILE__ "/alal/dupa.cpp"
  22. int main() {
  23. printf("%s\n", BASENAME());
  24. #undef __FILE__
  25. #define __FILE__ "/ala2/ala1/bobas.cpp"
  26. printf("%s\n", BASENAME());
  27. }
Success #stdin #stdout 0.02s 2724KB
stdin
Standard input is empty
stdout
dupa.cpp:23
ala1/bobas.cpp:26