Вот решение, которое работает для сред, в которых нет строковой библиотеки (ядро Linux, встроенные системы и т. Д.):
#define FILENAME ({ \
const char* filename_start = __FILE__; \
const char* filename = filename_start; \
while(*filename != '\0') \
filename++; \
while((filename != filename_start) && (*(filename - 1) != '/')) \
filename--; \
filename; })
Теперь просто используйте FILENAME
вместо __FILENAME__
.Да, это все еще во время выполнения, но это работает.