使用__LINE__、__FILE__和__FUNCTION__或__func__可获取C++调试时的行号、文件名和函数名。通过宏封装如LOG()能简化日志输出,便于定位问题。__LINE__和__FILE__为标准宏,__FUNCTION__虽非标准但广泛支持,__func__是C++11标准特性,类型安全更佳。注意__func__为函数内隐式定义的静态字符串,不可作宏替换;在内联函数中,这些宏反映调用处位置。结合编译器扩展可获取完整函数签名,但复杂度增加。

在C++开发中,调试时经常需要知道当前代码执行的位置,比如所在的函数名和行号。获取这些信息可以帮助快速定位问题。C++提供了几种方式来实现这一点,主要依赖于预定义宏。
使用内置宏获取函数名和行号
C++编译器支持一些标准预定义宏,可以在编译时自动展开为当前的源码信息:
__LINE__:展开为当前源文件中的行号(整数)。 __FILE__:展开为当前源文件的完整路径(字符串)。 __FUNCTION__:展开为当前函数的名称(静态字符串,非标准但广泛支持)。 __func__:C++11标准中引入,表示当前函数名,类型是const char*,每个函数内隐式定义。
示例代码:
#include void debug_info() { std::cout << "文件: " << __FILE__ << std::endl; std::cout << "行号: " << __LINE__ << std::endl; std::cout << "函数: " << __FUNCTION__ << std::endl; // 或使用 __func__ std::cout << "函数: " << __func__ << std::endl;}int main() { debug_info(); return 0;}
结合宏定义简化输出
为了方便重复使用,可以把常用信息封装成一个日志宏:
立即学习“C++免费学习笔记(深入)”;
#define LOG() do { std::cout << "[" << __FILE__ << ":" << __LINE__ << "] " << "函数: " << __FUNCTION__ << std::endl; } while(0)
调用LOG()即可打印当前位置信息,适合用于调试追踪。
注意事项与兼容性
__FUNCTION__不是C++标准强制要求的,但在GCC、Clang、MSVC中都支持。 __func__是C++11标准的一部分,在函数体内有效,不能当作宏使用,但更规范。 如果需要更详细的函数签名(包含返回类型、参数),需借助编译器扩展或运行时类型信息(如typeid),但会更复杂。 这些宏在内联函数中显示的是实际调用处的信息(取决于使用位置)。基本上就这些。利用__LINE__、__FILE__和__FUNCTION__或__func__,可以轻松获取调试所需的位置信息。不复杂但容易忽略细节。
以上就是c++++怎么获取当前函数名和行号_c++函数名与行号获取方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478569.html
微信扫一扫
支付宝扫一扫