我有两个在不同源文件中的函数:
a.cpp
void A()
{
B();
}
b.cpp
void B()
{
std::cout << "B() called from file: " << ??? << " line: " << ??? << std::endl;
}
如何获取调用的文件名和行号?
我有两个在不同源文件中的函数:
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__)
代码:
printf("%s(%d)--:",__FILE__,__LINE__);
reference: http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
__FILE__
和__LINE__
分别表示文件名和行号。 - David G