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

ops/2024/11/14 12:00:59/

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.ppmy.cn/ops/132316.html

相关文章

Linux平台C99与C++11获取系统时间

源码: #include <iostream> #include <chrono> #include <ctime> #include <thread>using namespace std; int main() {cout << "===使用C99方式获取系统时间===" << endl;time_t now = time(nullptr);struct tm *tm_c99 = lo…

SpringMVC课时2

-----------Spring+SpringMVC+SpringJDBC搭建web项目实现商品查询----------- 准备工作:创建商品数据库,以及商品表 #创建数据库 DROP DATABASE IF EXISTS goodsDB; CREATE DATABASE goodsDB; USE goodsDB; #创建商品表 goods #id number 商品编号,主键 #name Varchar2(…

【C#】选课程序增加、删除统计学时

文章目录 【例6-2】编写选课程序。利用利用列表框和组合框增加和删除相关课程&#xff0c;并统计学时数1. 表6-2 属性设置2. 设计窗体及页面3. 代码实现4. 运行效果 【例6-2】编写选课程序。利用利用列表框和组合框增加和删除相关课程&#xff0c;并统计学时数 分析&#xff1…

深入解析ETL与ELT架构:数据集成技术的演进与发展

摘要&#xff1a;随着大数据时代的到来&#xff0c;数据集成成为企业信息化建设的重要环节。本文将深入探讨ETL与ELT两种架构&#xff0c;分析它们在数据处理、性能、可扩展性等方面的差异&#xff0c;为企业数据集成提供技术指导。 一、引言 在大数据时代&#xff0c;企业需要…

A014-基于Spring Boot的家电销售展示平台设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

Flink处理无界数据流

Apache Flink 是一个专为处理无界和有界数据流而设计的流处理框架。处理无界数据流的关键在于能够实时处理不断到达的数据&#xff0c;并且保证处理的正确性和高效性。以下是Flink处理无界数据流的主要步骤和技术&#xff1a; 1. 数据源 (Source) 无界数据流的第一个步骤是从…

Spring Boot 集成JWT实现Token验证详解

文章目录 Spring Boot 集成JWT实现Token验证详解一、引言二、JWT和Token基础1、什么是Token2、什么是JWT3、JWT的结构4、JWT的工作原理 三、集成JWT1、引入JWT依赖2、创建Token工具类3、创建拦截器4、注册拦截器 四、总结 Spring Boot 集成JWT实现Token验证详解 一、引言 在现…

java 中List 的使用

List集合是Collection接口的子接口&#xff0c;其下有两个实现类分别为ArrayList和 LinkedList List是一个接口&#xff0c;不能用new创建对象&#xff0c;需要用 ArrayList类 和 LinkedList类 来创建 特点 有序&#xff1a;存储元素的顺序和取出元素的顺序一致可以重复&…