You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取函数被调用处的行号?是否存在类似__LINE__的宏?

问题分析

你当前的代码中,_DEBUG宏是在func1、func2函数内部调用的,预处理器宏__LINE__会捕获宏展开位置的行号(也就是函数内的行15、20),但你需要的是调用func1/func2时的行号(main函数里的25、26等)。

解决方案

不存在直接能获取函数调用处行号的预定义宏,但可以通过调整宏的设计实现需求:把func1、func2改成宏,让__LINE__在调用位置展开。

修改后的代码如下:

#include <iostream>

using namespace std;

void _debug(const string& text, int line)
{
    cout << text << " " << line << endl;
}

// 将func1、func2定义为宏,在调用处展开时传入当前行号
#define func1() _debug("func1", __LINE__)
#define func2() _debug("func2", __LINE__)

int main()
{
    func1(); // line 15(行号随实际代码位置自动调整)
    func2(); // line 16
    func1(); // line 17
    func2(); // line 18
}

运行后输出符合你的期望:

func1 15
func2 16
func1 17
func2 18
原理说明

__LINE__是预处理器在编译阶段处理的宏,它的值等于宏被展开时所在代码行的行号。通过把函数调用替换为宏,__LINE__会在main函数的调用位置展开,自然就能捕获到调用处的行号。

内容的提问来源于stack exchange,提问作者KcFnMi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:17:47