Visual C++ equivalent of __FILE__ , __LINE__ and __PRETTY_FUNCTION__

In VS2008, this:

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);
}

will print this:

c:\source\test_projects\blah\blah.cpp
14
A::Test
?Test@A@@QAE_NH@Z
bool __thiscall A::Test(int)

(The line number is "wrong" since there was really some extra stuff at the top of my file.)


__FILE__ and __LINE__ are standard, and I'm rather certain Microsoft compilers have essentially always had them.

__PRETTY_FUNCTION__ is a gcc feature.


For more portability in getting the current function name, you can try BOOST_CURRENT_FUNCTION.


Yes Visual C++ has them or an equivalent. See the responses here:

What's the difference between __PRETTY_FUNCTION__, __FUNCTION__, __func__? function-func/4384860#4384860

Also note that despite the upper case used, they aren't macros. They're variables.