新闻中心

c++怎么获取当前函数名和行号_c++中获取函数调试信息的方法

2025-11-20
浏览次数:
返回列表
使用__LINE__、__FILE__和__func__可获取行号、文件路径和函数名,结合__PRETTY_FUNCTION__显示完整函数签名,通过宏封装实现跨平台日志输出。

c++怎么获取当前函数名和行号_c++中获取函数调试信息的方法

在C++中获取当前函数名和行号,常用于调试、日志记录或异常追踪。虽然C++标准没有直接提供反射机制来获取函数名,但借助编译器内置宏和预定义标识符,可以轻松实现。

使用__LINE____FILE____func__

C++标准支持几个预定义的标识符和宏,可以在任何函数中直接使用:

  • __LINE__:当前代码行号(整数)
  • __FILE__:源文件路径(字符串)
  • __func__:当前函数名(静态字符串,非宏,由编译器生成)

示例:

<font face="Courier New"><strong>void</strong> testFunction() {
    std::cout << "File: " << __FILE__ << std::endl;
    std::cout << "Line: " << __LINE__ << std::endl;
    std::cout << "Function: " << __func__ << std::endl;
}</font>

输出类似:

File: /path/to/main.cpp
Line: 10
Function: testFunction

使用PRETTY_FUNCTION__获取更详细的函数签名

在GCC和Clang中,__PRETTY_FUNCTION__ 提供完整的函数原型,包括返回类型、参数等。

示例:

<font face="Courier New"><strong>template</strong><<strong>typename</strong> T>
<strong>void</strong> process(T value) {
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}</font>

输出可能是:

小云雀 小云雀

剪映出品的AI视频和图片创作助手

小云雀 1949 查看详情 小云雀
void process(T) [with T = int]

__func__ 更详细,适合模板调试。

跨平台兼容的宏封装

为了方便使用,可以定义一个日志宏:

<font face="Courier New">#define LOG_DEBUG() \
    std::cout << "[" << __FILE__ << ":" << __LINE__ \
              << "] " << __func__ << " called.\n"</font>

调用方式:

<font face="Courier New">LOG_DEBUG(); // 自动打印文件、行号和函数名</font>

在发布版本中可通过条件编译关闭:

<font face="Courier New">#ifdef DEBUG
#  define LOG_DEBUG() ...
#else
#  define LOG_DEBUG() do {} while(0)
#endif</font>

基本上就这些。利用__func____LINE__和编译器扩展,就能高效获取调试信息,不复杂但容易忽略细节。不同编译器对__PRETTY_FUNCTION__的支持略有差异,建议结合文档使用。

以上就是c++++怎么获取当前函数名和行号_c++中获取函数调试信息的方法的详细内容,更多请关注其它相关文章!


# c++  # 行号  # 游戏开发  # 边缘  # 几个  # 就能  # 相关文章  # 中文网  # 解决问题  # 可通过  # ai  # 河西区百度推广招聘网站  # 中山谷歌seo厂家  # 济南网站优化指导  # 河北关键词优化排名全包  # 淘宝怎样搭建网站店铺推广  # 眉山地网站推广  # 关键词排名诚信火24星  # 东光网站建设配置  # 江西营销seo推广招聘  # 正规网站推广怎么做  # 查看详情 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: EMS快递官网app_中国邮政速递物流手机客户端  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  2026春节假期票务安排_2026春节放假购票指南  利用5118提升短视频内容效果_5118短视频关键词优化方法  yandex入口引擎手机版 yandex安卓版下载入口  微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  “在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法  写好的html代码怎么运行出来_运行写好的html代码方法【教程】  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  微信商城在哪里打开【步骤】  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  必由学在线入口 必由学网页版快速登录入口  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  J*aScript中向JSON对象添加新属性的正确姿势  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  Excel Power Pivot如何处理XML数据源 构建高级数据模型  Go语言中JSON数据解析与字段访问教程  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  Mac怎么锁定备忘录_Mac备忘录加密设置教程  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  离线运行Go语言之旅:本地部署与GOPATH配置指南  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  mc.js官网登录入口 mc.js官方登录入口最新版  大象笔记网页版入口 印象笔记网页版登录入口  J*aScript:在map操作中高效处理空数组  J*a 递归快速排序中静态变量的状态管理与陷阱  单12V-2&#215;6实现为RTX 5090供电750W!甚至都没敢跑分  MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  蛙漫2台版漫画地址 Manwa2正版网页版链接  Django表单验证失败时保留用户输入数据的最佳实践  如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化  Android Studio计算器C键功能异常排查与修复教程  Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁  c++如何使用Meson构建系统_c++比CMake更快的构建工具  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  网易大神账号申诉需要多久_网易大神账号申诉流程说明  顺丰国际快递查询 国际件官方查询入口  J*a里如何使用forEach遍历Map_Map遍历方法说明  c++中为什么推荐使用using替代typedef_c++现代化类型别名  网易大神怎么保存别人动态的图片_网易大神动态图片保存方法  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】 

搜索