00. 软件环境

Visual Studio 2022, Visual C++, Version 17.5.4

01. 问题描述

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

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

然而,__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

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

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

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

03. 参考文献

解决 Visual C++ 17.5 __cplusplus 始终为 199711L 的问题的更多相关文章

  1. 解决记录:win10 无法安装VS2017,visual studio installer下载进度始终为0

    问题描述:win10 下无法安装VS2017,visual studio installer下载进度始终为0,点击取消按钮后,也没有反应,visual studio installer也关闭不掉: 具 ...

  2. 解决 win10 无法安装VS2019,visual studio installer下载进度始终为0

    解决 win10 无法安装VS2019,visual studio installer下载进度始终为0 目录 解决 win10 无法安装VS2019,visual studio installer下载 ...

  3. Visual Studio下__cplusplus宏为199711L的问题

    Visual Studio下__cplusplus宏为199711L的问题 / Zc:__ cplusplus(启用更新的__cplusplus宏) 该/ ZC:__ CPLUSPLUS编译器选项使_ ...

  4. 解决 Visual Studio 符号加载不完全问题

    解决 Visual Studio 符号加载不完全问题 工具 - 选项 - 搜索 "符号" - 选上服务器 | 加载所有符号, 之后符号就会显示完全

  5. 解决Visual Studio 2010/2012的RC4011 warnings

    如果在vc10/11工程的rc文件中有以下任意一行代码: #include <winuser.h> #include <richedit.h> 那么vc将会给出一对警告: C: ...

  6. 解决Visual Studio 2010/2012在调试时lock文件的方法

    调试3dsmax插件,有一个避免每次修改插件代码都需要重启3dsmax的方法,就是将导出的核心代码写在一个独立的DLL中,然后在插件代码需要导出时LoadLibrary这个DLL,导出之后再FreeL ...

  7. 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误

    VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误.   解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...

  8. 解决Visual Studio 2013调试时 Web服务框架中出现了无法识别的错误 问题

    此问题出现过很多次,点帮助,google, baidu 都没解决,后经过摸索解决,记录下来1.查找80port是否有被占用情况,需要查看skype[这东西不知道为什么为占用80], Reporting ...

  9. 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误

      VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误. 解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...

  10. 解决 Visual Studio 2012 有时不能调试的问题

    有时候发现 Visual Studio 2012 不能调试,有时候又能调试.感觉很烦,今天找到了一个解决办法,我也不知道为什么这样能解决. 问题: 解决:1. 找到 Properties ,双击 2. ...

随机推荐

  1. [Pholcus] Go项目 Pholcus 编写静态规则文件, 0 到 1

    1. 初始化项目包,go mod init [module-path] 比如:go mod init github.com/abc/efg 2. 新建一个目录放置我们编写的规则 go 文件. 3. m ...

  2. dotnet 6 使用 HttpWebRequest 进行 POST 文件将占用大量内存

    我有用户给我报告一个内存不足的问题,经过了调查,找到了依然是使用已经被标记过时的 HttpWebRequest 进行文件推送,推送过程中,由于 System.Net.RequestStream 将会完 ...

  3. 应用zabbix的实时导出(real-time export)功能

    说明 zabbix作为监控软件,有时也会需要获取历史数据作进一步的分析,通常可以采用3种办法: 通过zabbix API定期获取(通过web) 通过后端数据库定期读取(通过db) 应用实时导出功能配合 ...

  4. 校园圈子系统前后端安装开发app小程序h5

    四川掌上时代开发公司,作为一家专注于提供高质量软件解决方案的企业,在信息技术领域已经积累了丰富的经验和良好的声誉.位于中国四川省成都市,该公司不仅服务于本地市场,还将业务拓展到了全国乃至国际市场,与多 ...

  5. Seata原理浅析

    前言 Seata是阿里开源的分布式事务解决方案,本文将详细介绍 Seata 的事务模式.原理以及使用.了解之前需清楚什么是分布式事务. 一.什么是 Seata Seata 是一款开源的分布式事务解决方 ...

  6. 微信公众号,微信小程序,百度小程序免费发放了

    小程序免费领取了,是真的免费哦 每人限领一套,100%开源,无后门 免费领取方式直接看tpframe官方网站

  7. Java 8 中Stream用法

    Stream是Java 8新增的接口,Stream可以认为是一个高级版本的 Iterator. 废话不多说直接上代码 package com.example.demo; import org.juni ...

  8. Vue cli使用Element UI

    当前的测试环境如下: ---- 新版的@vue/cli ---- Vue2.x版本 第一步:安装Element UI npm i element-ui -S 第二步:引入Element UI 在mai ...

  9. .NET6之MiniAPI(九):基于角色的身份验证和授权

    身份验证是这样一个过程:由用户提供凭据,然后将其与存储在操作系统.数据库.应用或资源中的凭据进行比较. 在授权过程中,如果凭据匹配,则用户身份验证成功,可执行已向其授权的操作. 授权指判断允许用户执行 ...

  10. firewall防火墙基础配置

    Firewalld防火墙 Centos7 中集成了防火墙管理工具, Firewall系统动态防火墙管理器是作为默认的防火墙工具. 它支持规则动态更新,并加入zone区域概念. Firewalld防火墙 ...