Эквивалент макроса __LINE__ относительно начала функции - PullRequest
3 голосов
/ 26 февраля 2020

В C / C ++, есть ли макрос, который сообщит мне номер строки относительно начала функции, в которой находится макрос, а не относительно начала файла?

1 Ответ

4 голосов
/ 26 февраля 2020

Нет, но вы можете сделать что-то несколько эквивалентное, создав смещение строки:

int func(char *s)
{   static const int begin_line = __LINE__;
    #define func_line (__LINE__ - begin_line)
    /* ... */
    printf("%s():%d\n", __func__, func_line);
}

Вывод:

fun c (): 3

Обратите внимание, что значение begin_line, расположенное на той же строке, что и скобка, имеет важное значение. Если вам нужны строковые индексы, начинающиеся с нуля, добавьте новую строку.

В C ++ вы можете использовать constexpr вместо static const для оценки времени компиляции begin_line.

...