c++ - 如何获取函数调用的文件名和行号?

标签 c++

<分区>

我在不同的源文件中有两个函数:

a.cpp

void A()
{
    B();
}

b.cpp

void B()
{
    std::cout << "B() called from file: " << ??? << " line: " << ??? << std::endl;
}

如何获取调用的文件名和行号?

最佳答案

一般来说,您可以通过将您的函数隐藏在宏调用后面来自动执行此操作,该宏调用传递所有 __FILE____LINE__

void _B(const char* file, int line) { ... } 
#define B() _B(__FILE__, __LINE__)

但这绝不是万无一失的解决方案。开发人员可以直接调用 _B 或从生成的代码、程序集等调用 _B ....其中可能没有有意义的文件/行号

OP 要求一个带参数的例子

void _C(int p1, char p2, const char* file, int line) { ... } 
#define C(p1, p2) _C(p1, p2, __FILE__, __LINE__)

关于c++ - 如何获取函数调用的文件名和行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21022436/

相关文章:

c++ - 如何使用 LDAP 对用户进行密码验证?

c++ - 如何在 ASC 和 DESC 模式下对 C++ 数组进行排序?

java - C 和 C++ 中的 JNI 调用不同?

c++ - C++ 应用程序的 XML 用法

c++ - InterlockedDecrement 使用 XADD 但 InterlockedIncrement 使用 INC?

c++ - 从派生类方法设置基对象

c++ - 如何在C++中实现继承并解决错误 "parent class is not accessible base of child class"?

c++ - 创建一个方法来使用模板迭代自定义类的任何容器?

C++模板排序

c++ - *(volatile unsigned int *) 0x00 = 0x00; 的含义