首页 > 编程语言 >解决 Visual C++ 17.5 __cplusplus 始终为 199711L 的问题

解决 Visual C++ 17.5 __cplusplus 始终为 199711L 的问题

时间:2023-04-23 16:25:37浏览次数:48  
标签:__ cplusplus C++ Standard Visual 199711L

00. 软件环境

Visual Studio 2022, Visual C++, Version 17.5.4

01. 问题描述

在应用 https://github.com/ToniLipponen/cpp-sqlite 的过程中,发现源代码文件 sqlite.hpp 中,有一处宏,和本项目的 C++ Language Standard 有关,如下图所示:

image

将鼠标悬停在 __cplusplus 这个宏上,可以看到它的值展开为:199711L。现在我们更改本项目的 C++ Language Standard,从默认值 Default (ISO C++14 Standard) 更改为 ISO C++17 Standard (/std:c++17),如下图所示:

image

然而,__cplusplus 宏的值依然是 199711L。无论将 C++ Language Standard 改为任何值,__cplusplus 宏的值都被展开为 199711L,始终没有改变。这是为什么呢,如何纠正这个问题呢?

02. 查阅资料解决问题

通过检索,发现微软官方文档中说明了这个问题:/Zc:__cplusplus (Enable updated __cplusplus macro)

这篇文章里面简单来说,讲的就是这个意思:自从 Visual Studio 2017 Version 15.7 以来,Visual C++ 中增加了一个编译选项:/Zc:__cplusplus,这个编译选项默认是关闭的,只有打开了这个编译选项,__cplusplus 这个宏才能被正确地更新为 C++ Language Standard 对应的值。

进行以下 2 步操作:

  1. 本项目的 C++ Language Standard,从默认值 Default (ISO C++14 Standard) 更改为 ISO C++17 Standard (/std:c++17)。
  2. 如下图所示,在项目属性的 C/C++ | Command Line 中,增加:/Zc:__cplusplus

image

然后,再看看代码编辑器中源代码文件 sqlite.hpp 的 __cplusplus 宏:

image

将鼠标悬停在 __cplusplus 宏上面,可以看到它已经展开为 201703L 这个值。与我们的预期相符。

微软的官方文档中是这样解释当 /Zc:__cplusplus 编译开关打开或者关闭时 __cplusplus 宏的取值情况的:

image

03. 参考文献

标签:__,cplusplus,C++,Standard,Visual,199711L
From: https://www.cnblogs.com/yapingxin/p/17346752.html

相关文章

  • iptable添加对指定IP放行指定端口策略规则
    添加到最后iptables-AINPUT-s192.168.3.19-ptcp--dport9235-jACCEPTiptables-AOUTPUT-d192.168.3.19-ptcp--sport9235-jACCEPT添加到指定行iptables-IINPUT10-s192.168.3.19-ptcp--dport9235-jACCEPTiptables-IOUTPUT10-d192.168.3.19......
  • Springboot提高
    全局异常处理器未做处理的情况:当我没没有做任何异常处理时,mapper接口操作数据库出错时,会将异常向上抛给ServiceService中的异常会往上抛给controllercontroller会将异常抛给框架响应给浏览器一个JSON格式的数据这个数据并不符合我们统一响应结果的规范如何处理?方案一:......
  • 【uni-app】【02】请求域名的全局配置。
    关于uni-app的请求问题,可以访问官方文档https://uniapp.dcloud.net.cn/api/request/request.html值得注意的一个点就是全局配置域名的问题。因为本地测试是localhost,但是实际部署前后端分离的,域名就不是localhost了,端口号什么的也可能要变,要是不用一个全局变量来代替域名,那后期......
  • Nginx配置跨域,覆盖后端服务跨域配置
    本篇文章主要介绍了,如何通过Nginx配置跨域,并覆盖后端服务跨域配置。先看下后端代码跨域配置:主要的目标是:不修改后端跨域配置代码,来实现Nginx跨域指定域名。@BeanpublicCorsFiltercorsFilter(){finalUrlBasedCorsConfigurationSourceurlBasedCorsCon......
  • Java__SpringBoot与Vue连接
    SpringBoot与Vue注解RequestMapping("/dir/")创建一个方便前端调用的接口目录/接口函数,前端可以获取到函数返回的数据@RestController@RequestMapping("/dir/")publicclassBotInfoController{@RequestMapping("getinfo/")publicMap<String,String>GetI......
  • apisix网关使用自研插件流程
    1. 关于apisix网关插件apisix插件分为内置插件和自编插件,本文主要介绍使用自研插件的流程,内置插件使用方法参考官方文档内置插件官方文档:https://apisix.apache.org/zh/docs/apisix/plugins/batch-requests/2. 使用自研插件的实现步骤apisix支持多种语言自研插件,本文主要介......
  • Explain执行计划分析
    id操作的唯一标识,值越大的操作越先执行select_type操作的类型,不同类型的查询效率不同.包括:simple,简单的select语句,查询中不包含自查询或者unionprimary,查询若包含任何复杂的子部分,最外层查询则被标记为primarysubquery,在select或where列表中包含子查询derived,在f......
  • cnblogs iconfont.js?v=unknown bug All In One
    cnblogsiconfont.js?v=unknownbugAllInOneUncaughtSyntaxError:Unexpectedtoken'<'(aticonfont.js?v=unknown:1:1)demoshttps://i.cnblogs.com/posts/edit;postId=4687706https://www.cnblogs.com/xgqfrms/p/4687706.html#5170738(......
  • Unity___QFramework笔记
    引入Event引入事件监听。使用方法先定义一个事件类//定义数据变更事件publicstructCountChangeEvent//++{}//执行事件this.SendEvent<CountChangeEvent>();//++//注册事件this.RegisterEvent<CountChangeEvent>(e......
  • 图数据库
    1前言图数据结构,能够很自然地表征现实世界。比如用户、门店、骑手这些实体可以用图中的点来表示,用户到门店的消费行为、骑手给用户的送餐行为可以用图中的边来表示。使用图的方式对场景建模,便于描述复杂关系。在美团,也有比较多的图数据存储及多跳查询需求,概括起来主要包括以下4......