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

最佳答案

不,但是您可以通过创建行偏移量来做一些等效的操作:

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的编译时评估。

10-04 14:28
查看更多