__LINE__宏相对于功能开始的位置

问题描述 投票:2回答:1

在C / C ++中,是否存在一个宏,该宏会告诉我相对于在其中找到该宏的函数开头而不是相对于文件开头的行号?

c c-preprocessor
1个回答
2
投票

否,但是您可以通过创建行偏移量来做一些等效的事情:

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

输出:

func():3

请注意,begin_line与括号放在同一行很重要。如果要从零开始的行索引,请随时添加换行符。

在C ++中,您可以使用constexpr而不是static const进行begin_line的编译时评估。

© www.soinside.com 2019 - 2024. All rights reserved.