当前位置: 首页 > news >正文

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

目录

  • 软件环境
  • 问题描述
  • 查阅资料解决问题
  • 参考文献

软件环境

Visual Studio 2022, Visual C++, Version 17.5.4

问题描述

在应用 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,始终没有改变。这是为什么呢,如何纠正这个问题呢?

查阅资料解决问题

通过检索,发现微软官方文档中说明了这个问题:/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 宏的取值情况的:
在这里插入图片描述

参考文献

  1. /Zc:__cplusplus (Enable updated __cplusplus macro)
  2. How are the __cplusplus directive defined in various compilers?
http://www.lryc.cn/news/373504.html

相关文章:

  • Mac M3 Pro安装Hadoop-3.3.6
  • mac下Xcode在iphone真机上测试运行iOS软件
  • Mysql(一):深入理解Mysql索引底层数据结构与算法
  • WebMvcConfigurer配置不当导致鉴权失败
  • 微信小程序毕业设计-实验室管理系统项目开发实战(附源码+论文)
  • C#:lock锁与订单号(或交易号)的生成
  • 计算机图形学入门11:图形管线与着色器
  • 正解 x86 Linux 内存管理
  • springboot读取配置时,读取到了系统环境变量
  • 平均召回(Average Recall,AR)概述
  • WWDC 2024 回顾:Apple Intelligence 的发布与解析
  • [Cloud Networking] SPDY 协议
  • Linux-笔记 samba实现映射网络驱动器到Win 10
  • 【技巧】Leetcode 67. 二进制求和【简单】
  • vue项目问题汇总
  • Android 工程副总裁卸任
  • Qt 6.13
  • 发布自己的c#包到nuget
  • 【学习笔记】MySQL(Ⅲ)
  • STM32项目分享:心率血氧手环(可报警)
  • 前端面经总结、学习【2023秋招】
  • Linux DMA-Buf驱动框架
  • MySQL之优化服务器设置(三)
  • 如何实现 Python 源码压缩加密常用解决方案详细教程(更新中)
  • SAP Build 2-PDF数据提取与决策
  • 【回溯】Leetcode 77. 组合【中等】
  • 项目中常量的定义方式
  • BL104钡铼多协议采集网关助力企业智能化转型
  • 【LC刷题】DAY08:151 55 28 459
  • Debian 12.5 一键安装 Oracle 19C 单机