【问题标题】:Is there MSVC equivalent for __builtin__FUNCTION()?__builtin__FUNCTION() 是否有 MSVC 等效项?
【发布时间】:2018-10-31 13:40:02
【问题描述】:

根据这个answer,我们可以在GCC中使用__builtin__FUNCTION()找到调用函数的名称。是否有与此等效的 MSVC?

【问题讨论】:

    标签: c++ visual-studio


    【解决方案1】:

    std::source_location 将是未来的跨平台解决方案,让您可以:

    void log(const std::string& message, const std::experimental::source_location& location = std::experimental::source_location::current())
    {
        std::cout << location.function_name() << ": " << message << "\n";
    }
    
    int main()
    {
       log("test");
    }
    

    在这可用之前,我所知道的最佳解决方案是使用宏来捕获 __FUNCTION__ 的值并将其传递给您的函数。例如这样的:

    void log(const std::string& message, const std::string& function)
    {
    }
    
    #define LOG(message) log(message, __FUNCTION__)
    
    int main()
    {
      LOG("test");
    }
    

    【讨论】:

    • __builtin_FUNCTION 是 GCC 对 source_location 实现的支持!对于直接问题,这是一个非常有趣的答案!
    • @Oliv 抱歉,我不明白您的评论? OP 正在寻找视觉工作室解决方案
    • 你的意思是source_location是在MSVC中实现的吗?
    【解决方案2】:

    是的,为 VS 2019 16.6 Preview 2(据此 link)添加了此类内在函数(__builtin_FILE()__builtin_FUNCTION()__builtin_LINE()__builtin_COLUMN())以支持 c++20 std::source_location

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 2016-03-02
      • 2016-05-11
      相关资源
      最近更新 更多