C 编译器支持

来自cppreference.com
< c


C23 特性

注意:随着 C23/2x 标准进程推进,这个页面可能过时。

c23 核心语言特性


C23 功能特性

 
提案

 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ for AIX
IBM Open XL C++ for z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
无消息的 _Static_assert N2265 9 9 6.5 2021.1.2 (基于 clang)
[[nodiscard]] N2267 10 9 6.4 2021.1.2 (基于 clang)
[[maybe_unused]] N2270 10 9 6.4 2021.1.2 (基于 clang)
[[deprecated]] N2334 10 9 6.4 2021.1.2 (基于 clang)
属性 N2335
N2554
10 9 6.4 2021.1.2 (基于 clang)
ieee 754 十进制浮点类型 N2341 4.2 (部分)* 13.0 (部分)*
[[fallthrough]] N2408 10 9 6.4 2021.1.2 (基于 clang)
u8 字符常量 N2418 10 15 6.5 2022.2
移除无原型的函数定义 N2432 10 15 2022.2
有消息 (message) 的 [[nodiscard]] N2448 11 10 6.4 2021.1.2 (基于 clang)
函数定义中的匿名形参 N2480 11 11 6.4 2021.1.2 (基于 clang)
声明和语句块结束前的标签 N2508 11 16 部分* 6.5 17.0*
二进制整数常量 N2549 4.3*
11
2.9*
9
19.0 (2015)** 6.5 11.0*
预处理条件中的 __has_c_attribute N2553 11 9 6.5 2021.1.2 (基于 clang)
允许重复属性 N2557 11 13 6.5 2021.4 (基于 clang
IEEE 754 交换和扩展类型 N2601 7 (部分)* 6 (部分)* 部分*
数位分隔符 N2626 12 13 19.0 (2015)** 6.5 18.0*
#elifdef#elifndef N2645 12 13

13.1.6*

6.5 2021.4
u8 字符串字面量的类型修改 N2653
标签的 [[maybe_unused]] N2662 11 16 6.5 2022.2
#warning N2686 6.5
位精确整数类型 (_BitInt) N2763 14 15 6.5 2022.2
[[noreturn]] N2764 13 15 6.5 2022.2
位精确整数常量后缀 N2775 14 15 2022.2
预处理条件中的 __has_include N2799 5 19.11* 6.5 18.0
标识符语法,使用 Unicode 标准附件31 N2836 13 15 6.5 2022.2
移除无原型的函数声明 N2841 13 15 2022.2


空初始化式 N2900 部分* 部分* 部分* 部分* 部分*


typeoftypeof_unqual n2927
N2930
部分*
13
部分*
16
19.39* 部分* 部分* 部分* 部分*
新的关键字拼写 N2934 13 16 6.5
预定义 truefalse N2935 13 15 2022.2
[[unsequenced]][[reproducible]] N2956
放宽对变长参数列表的要求 N2975 13 16 6.5 2023.1
对象定义中的类型接口 N3007 13
#embed N3017
constexpr 对象 N3018 13
改善普通枚举 N3029 13
增强枚举 N3030 13 可能
__va_opt__ N3033 8 12 6.5
复合字面值的存储说明符 N3038 13
nullptr N3042 13 16
 

C23 功能特性
 

提案
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ for AIX
IBM Open XL C++ for z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc

c23 库特性

C99 特性

C99 核心语言特性

C99 功能特性

 
提案

 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ for AIX
IBM Open XL C++ for z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
标识符中的通用字符名 不适用 3.1
提高翻译极限 N590 0.9 不适用
// 注释 N644 2.7
restrict 指针 N448 2.95 部分*
增强算术类型 N815
N601
N620
N638
N657
N694
N809
部分 可能
灵活的数组成员 不适用 3.0
变长数组 (VLA) 类型 N683 0.9
可变修改 (VM) 类型 N2778 不适用
定名初始化式 N494 3.0
非常量初始化式 不适用 1.21 不适用
幂等 cvr 限定符 N505 3.0 不适用
enumerator-list 中的尾部逗号 不适用 0.9
十六进制浮点常量 N308 2.8
复合字面量 N716 3.1
浮点环境 不适用 部分 部分
规定有符号整数类型的除法进行截断 N617 0.9 不适用
main() 函数中的隐式 return 0; 不适用
混合安排声明和语句 N740 3.0
for 循环中的 初始化语句 不适用
inline 函数 N741 4.3
预定义变量 __func__ N611 2.95
函数声明中的 [] 之中的 cvr 限定符和 static 不适用 3.1
变参宏 N707 2.95
_Pragma 预处理器运算符 N634 3.0 部分*
浮点求值的标准语用(pragma) N631
N696
 

C99 功能特性
 

提案
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ for AIX
IBM Open XL C++ for z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc

引用

各编译器厂商的兼容性检查单文档(这些通常比以上表格更能反映最新的情况)

  • GCC
   暂无文档
   暂无文档
  • Intel C++ (更新于 2018-11 )
   暂无文档
  • EDG eccp
   暂无文档
  • Sun/Oracle C++
   暂无文档
  • IBM XL C++
   暂无文档
  • Embarcadero C++ Builder
   暂无文档
  • Cray
   暂无文档
  • Nvidia HPC C++ (Portland Group) (PGI)
   暂无文档
  • Media nvcc
   暂无文档

参阅