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

编译器、IDE对C/C++新标准的支持

Visual C++对C/C++新标准的支持

很遗憾的是,微软VC++对C99的支持直到VS2015才基本完全支持,在VS2012之前,仅仅支持C89. 也正是2015年之前,这么多人骂微软并纷纷转移到其它C语言编译器的原因。VS2019开始才正式宣布支持C11/C17.

对于C++标准,VS2013开始支持C++11,VS2017支持C++17, VS2019支持C++20, 显然,微软更偏爱C++.

C/C++编译器首次支持标准的时间 

早期MSVC对C99支持不好的原因

不同编译器对C标准支持程度

  • MSVC C99/C11
    Microsoft C/C++ language conformance

  • GCC
    Status of C99 features in GCC

C/C++编译器和支持标准

  • GCC
    - GCC没有任何版本默认编译器是C99 (可以用-std=c99开启),较早期版本就已经支持部分C99
    - GCC 5.1首次默认C编译器为C11
    - GCC 8.1首次默认C编译器为C17,GCC13.2 (2023/7/27 released)同样默认为C17.
  • GCC C++
    - GCC 6.1 版本之前默认是C++98.
    - GCC 6.1 首次默认C++编译器为C++14.
    - GCC 11.1 首次默认C++编译器为C++17,GCC13.2 (2023/7/27 released)保持默认为C++17.
  • MSVC C
    - VS2015 支持C99,编译器默认是旧MSVC,.
    - VS2019 编译器默认是旧MSVC, 可选支持C11/C17.
    - 旧MSVC:从VS2015到VS2022,默认的 C 编译器(即未指定 /std:c11 和 /std:c17 时的编译器)实现 ANSI C89,但包括几个 Microsoft 扩展,其中一些是 ISO C99 的一部分。
    详细参见:/std(指定语言标准版本) | Microsoft Learn
  • MSVC C++
    - VS2015支持C++11, 编译器默认为C++14..
    - VS2017支持C++14和C++17, 编译器默认为C++14..
    - VS2019陆续支持C++20, 编译器默认为C++14.
    - VS2022支持C++20,编译器默认为C++14.

注意:上面提到的是对应编译器支持全部或者大部分的标准的时间,事实上在此之前版本编译器就已经在逐步支持,只是支持程度有限。

Visual C++对C/C++新标准的支持 C/C++编译器和标准的详细信息

如何知道当前编译器默认C++标准是多少?

早期MSVC对C99支持不好的原因

  • 相比C语言,微软更推崇C++(即使Windows内核是C语言编写,但有多少外部开发者会用C语言开发呢?)

  • 按照微软C++团队的说法,使用C++编译器比C语言编译器的多很多


若文章对您有帮助,欢迎关注。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。


http://www.kler.cn/a/385767.html

相关文章:

  • SpringBoot使用AspectJ的@Around注解实现AOP全局记录接口:请求日志、响应日志、异常日志
  • 前后端请求响应
  • ODC 如何精确呈现SQL耗时 | OceanBase 开发者工具解析
  • 8.C++面向对象5(实现一个较为完善的日期类)
  • 实验8.1 无失真信源编码的实现
  • 基于Java Web 的家乡特色菜推荐系统
  • 微服务系列六:分布式事务与seata
  • 游戏提示错误:xinput1_3.dll缺失?四种修复错误的xinput1_3.dll文件
  • JavaScript重定向对网络爬虫的影响及处理
  • LVGL 与 QT
  • 大数据分析案例-基于随机森林算法的智能手机价格预测模型
  • tartanvo ubuntu 20.04部署
  • 云计算基础:AWS入门指南
  • 大数据-214 数据挖掘 机器学习理论 - KMeans Python 实现 算法验证 sklearn n_clusters labels
  • YOLO11改进-模块-引入CMUNeXt Block 增强全局信息
  • 树莓派上安装与配置 Nginx Web 服务器教程
  • 使用 axios 拦截器实现请求和响应的统一处理(附常见面试题)
  • OPPO开源Diffusion多语言适配器—— MultilingualSD3-adapter 和 ChineseFLUX.1-adapter
  • 【Android】ubutun 创建Androidstudio桌面快捷方式
  • 初始MQ(安装使用RabbitMQ,了解交换机)
  • HarmonyOs DevEco Studio小技巧28--部分鸿蒙生命周期详解
  • 陀螺仪原理探析
  • uni-app - - - - - 钉钉小程序 uni.showToast回调函数不执行问题(PC端钉钉小程序 接口API回调函数不执行)
  • 前端自动化测试selenium在最新探索使用
  • Chromium 中chrome.webRequest扩展接口定义c++
  • 稀土阻燃协效剂-氢氧化镁的应用