首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Visual C++相当于__FILE__、__LINE__和__PRETTY_FUNCTION__

Visual C++相当于__FILE__、__LINE__和__PRETTY_FUNCTION__
EN

Stack Overflow用户
提问于 2010-12-14 06:53:53
回答 8查看 23K关注 0票数 19

GCC编译器给了我以下宏:

  • __FILE__,这样我就可以打印出文件名+ directory.
  • __LINE__,这样我就可以打印出打印from.
  • __PRETTY_FUNCTION__所在位置的行号,这样我就可以打印出漂亮的函数名

Visual C++是否有这些宏的等价物?一个附带的问题是,这些是C++编译器的标准吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-12-14 07:05:34

在VS2008中,这是:

代码语言:javascript
运行
复制
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);
}

将打印以下内容:

代码语言:javascript
运行
复制
c:\source\test_projects\blah\blah.cpp
14
A::Test
?Test@A@@QAE_NH@Z
bool __thiscall A::Test(int)

(行号是“错误的”,因为在我的文件顶部确实有一些额外的东西。)

票数 31
EN

Stack Overflow用户

发布于 2010-12-14 06:57:54

__FILE____LINE__是标准的,我敢肯定微软的编译器基本上一直都有它们。

__PRETTY_FUNCTION__是gcc的一个特性。

票数 9
EN

Stack Overflow用户

发布于 2010-12-14 07:11:31

要获得当前函数名的更多可移植性,可以尝试使用BOOST_CURRENT_FUNCTION

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4434282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档