You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2017中VC++使用__PRETTY_FUNCTION__编译报错,如何解决?

在Visual Studio 2017 (15.5.6)的Visual C++中使用__PRETTY_FUNCTION__的解决方案

为什么会出现「提示正常但编译报错」的情况?

这是因为Visual Studio的**IntelliSense(智能代码提示工具)**为了兼容主流编译器的常用宏,会把GCC的__PRETTY_FUNCTION__加入到提示列表中,甚至能模拟显示它的预期值。但实际负责编译代码的MSVC编译器本身并不原生支持这个宏,所以编译阶段就会抛出错误——简单说就是「提示工具和实际编译器的规则没对齐」,这种情况在跨编译器兼容场景里挺常见的。

让__PRETTY_FUNCTION__正常工作的解决方案

MSVC有自己的等效宏,你可以通过以下两种方式解决:

  1. 直接使用MSVC原生宏__FUNCSIG__
    这个宏是MSVC原生支持的,功能和__PRETTY_FUNCTION__类似,会输出函数的完整签名。比如:

    #include <iostream>
    void testFunction(int param) {
        std::cout << __FUNCSIG__ << std::endl;
    }
    

    编译运行后会输出类似:void __cdecl testFunction(int)的内容。

  2. 定义兼容宏实现跨平台适配
    如果你希望代码同时兼容GCC和MSVC,不想修改原有代码里的__PRETTY_FUNCTION__,可以在代码开头添加宏定义:

    #ifdef _MSC_VER
    // 在MSVC环境下将__PRETTY_FUNCTION__映射到__FUNCSIG__
    #define __PRETTY_FUNCTION__ __FUNCSIG__
    #endif
    

    这样原有的__PRETTY_FUNCTION__代码在MSVC里会被替换成__FUNCSIG__,编译就能正常通过,同时在GCC环境下依然使用原生的__PRETTY_FUNCTION__。

额外说明

在你使用的VS2017 15.5.6版本中,MSVC并没有原生支持__PRETTY_FUNCTION__,所以必须通过上述宏替换的方式解决。后续的VS2019及更高版本对GCC宏的兼容性有所提升,但针对当前版本,这是最稳妥的方案。

内容的提问来源于stack exchange,提问作者Adam Badura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:45:51