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