__func__ 怎么打印行号
时间: 2024-09-14 19:03:23 浏览: 22
`__func__` 是 C++ 中的一个关键字,它提供了一种在函数内部获取当前函数名称的方式。如果你想在打印时附带行号,通常需要借助一些调试工具或者是第三方库,因为 `__func__`本身并不包含行号信息。
一种常见的做法是在编译时启用 `-fno-pretty-lookup` 标志,这会让编译器在`__PRETTY_FUNCTION__`宏中包含行号。但是,直接使用`__func__`通常是不会显示行号的。
如果你想要在运行时动态获取源文件和行号,可以考虑使用诸如 `backtrace` 和 `dladdr` 等系统调用,或者使用一些如 `glog`、` spdlog` 等日志库提供的功能。例如:
```cpp
#include <cstdarg>
#include <execinfo.h>
#include <stdio.h>
void log_with_lineno(const char* fmt, ...) {
void *array[10];
size_t size;
int i;
va_list args;
va_start(args, fmt);
backtrace(array, 10);
size = backtrace_symbols_fd(array, 10, stdout);
for (i = 0; i < size; i++) {
fprintf(stderr, "Line %d: ", i + 1);
vfprintf(stderr, fmt, args);
va_end(args);
fprintf(stderr, "\n");
}
va_end(args);
}
int main() {
// 使用 log_with_lineno 替换 printf 来记录行号
log_with_lineno("Function called at line %d", __LINE__);
return 0;
}
```
这个例子中,`log_with_lineno` 函数会打印出调用它的行号以及格式化的字符串。然而,这需要编译选项支持,并不是所有环境都能直接使用。