Макрос __FILE__ показывает полный путь - PullRequest
141 голосов
/ 13 декабря 2011

Стандартный предопределенный MACRO __FILE__, доступный в C, показывает полный путь к файлу. Есть ли способ сократить путь? Я имею в виду вместо

/full/path/to/file.c

Понятно

to/file.c

или

file.c

Ответы [ 22 ]

0 голосов
/ 17 ноября 2017

Вот решение, которое работает для сред, в которых нет строковой библиотеки (ядро 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__.Да, это все еще во время выполнения, но это работает.

0 голосов
/ 13 декабря 2011

Поскольку вы используете GCC, вы можете воспользоваться из

__BASE_FILE__ Этот макрос расширяется до имени основного входного файла в форме буквы Cстроковая константа.Это исходный файл, который был указан в командной строке препроцессора или компилятора C

, а затем управляйте отображением имени файла, изменяя представление исходного файла (полный путь / относительный путь /basename) во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...