首页 > 解决方案 > 相对于函数开头的 __LINE__ 宏的等价物

问题描述

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

标签: cc-preprocessor

解决方案


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

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

输出:

函数():3

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

在 C ++中,您可以constexpr使用.static constbegin_line


推荐阅读