GCC编译器给了我以下宏:
__FILE__
,这样我就可以打印出文件名+ directory.__LINE__
,这样我就可以打印出打印from.__PRETTY_FUNCTION__
所在位置的行号,这样我就可以打印出漂亮的函数名Visual C++是否有这些宏的等价物?一个附带的问题是,这些是C++编译器的标准吗?
发布于 2010-12-14 07:05:34
在VS2008中,这是:
struct A
{
bool Test(int iDummyArg)
{
const char *szFile = __FILE__;
int iLine = __LINE__;
const char *szFunc = __FUNCTION__; // Func name
const char *szFunD = __FUNCDNAME__; // Decorated
const char *szFunS = __FUNCSIG__; // Signature
printf("%s\n", szFile);
printf("%d\n", iLine);
printf("%s\n", szFunc);
printf("%s\n", szFunD);
printf("%s\n", szFunS);
return true;
}
};
int wmain(int argc, TCHAR *lpszArgv[])
{
A a;
a.Test(10);
}
将打印以下内容:
c:\source\test_projects\blah\blah.cpp
14
A::Test
?Test@A@@QAE_NH@Z
bool __thiscall A::Test(int)
(行号是“错误的”,因为在我的文件顶部确实有一些额外的东西。)
发布于 2010-12-14 06:57:54
__FILE__
和__LINE__
是标准的,我敢肯定微软的编译器基本上一直都有它们。
__PRETTY_FUNCTION__
是gcc的一个特性。
发布于 2010-12-14 07:11:31
要获得当前函数名的更多可移植性,可以尝试使用BOOST_CURRENT_FUNCTION。
https://stackoverflow.com/questions/4434282
复制相似问题