找回密码
 立即注册
查看: 191|回复: 3

C语言, C++语言的最新标准 | C23, C++23

[复制链接]

865

主题

1万

回帖

2万

积分

管理员

积分
25122
发表于 2026-8-14 15:59:51 | 显示全部楼层 |阅读模式
C语言, C++语言的最新标准 ?
回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
 楼主| 发表于 2026-8-14 16:00:15 | 显示全部楼层

截至 2026 年 8 月,C 语言和 C++ 语言的最新正式标准及关键动态如下:


C 语言

当前最新正式标准:C23(ISO/IEC 9899:2024)

C23 于 2023 年定稿,2024 年正式发布,是 C11(2011)之后的一次重大更新。

C23 的主要新特性:

特性 说明
nullptr 关键字 替代 NULL 宏,类型安全
true / false 关键字 原生布尔字面量,不再需要 <stdbool.h>
#elifdef / #elifndef 简化条件编译嵌套
auto 类型推导 与 C++ 的 auto 对齐
constexpr 编译期求值支持
typeof / typeof_unqual 获取表达式类型(GCC 扩展转正)
空初始化 {} int x = {}; 等价于 int x = 0;
static_assert 单参数形式 不再强制写错误消息
二进制字面量 0b1010 直观表示二进制
数字分隔符 ' int x = 1'000'000;
[[attributes]] 扩展 新增 [[deprecated]][[fallthrough]][[nodiscard]]
%wN%wfN 格式说明符 用于 intN_tfloatN_t 的安全打印
char8_t 类型 UTF-8 字符类型
增强的 <stdckdint.h> 溢出检查运算

编译器支持情况(截至 2026 年):

  • GCC:自 GCC 14 起基本完整支持,GCC 15 完善
  • Clang/LLVM:自 Clang 18 起大幅支持,Clang 19/20 趋于完整
  • MSVC:Visual Studio 2022 17.10+ 部分支持,17.14+ 基本完整

下一版:C2y(进行中,预计 2029 年前后)

C 标准委员会(WG14)已在推进下一版标准(暂称 C2y),目前处于提案收集和讨论阶段,尚未定稿。


C++ 语言

当前最新正式标准:C++23(ISO/IEC 14882:2024)

C++23 于 2023 年定稿,2024 年正式发布,是 C++20 之后的增量更新。

C++23 的主要新特性:

特性 说明
std::expected<T, E> 函数式错误处理,替代异常/optional 的不足
std::mdspan 多维数组视图,科学计算友好
std::print / std::println 类型安全的格式化输出,替代 printf
std::flat_map / std::flat_set 基于连续内存的扁平容器,缓存友好
std::generator<T> 协程生成器
std::spanstream span 基础上的字符串流
std::stacktrace 堆栈跟踪支持
std::byteswap 字节序转换
std::to_underlying 枚举转底层值的便捷函数
import std; 标准库模块化导入(MSVC 优先支持)
推导 this(Deducing this) 简化 CRTP 和值类别重载
静态 operator[] 多维下标运算符
if consteval 编译期分支判断
单参数 static_assert 与 C23 对齐
范围适配器扩展 std::views::zipchunkslideadjacent
std::ranges::to<T> 范围直接转换为容器

编译器支持情况(截至 2026 年):

  • GCC:GCC 13 起大部分支持,GCC 14/15 完善
  • Clang:Clang 16 起大部分支持,Clang 19/20 完善
  • MSVC:Visual Studio 2022 17.8+ 起大部分支持,17.12+ 基本完整

下一版:C++26(进行中,预计 2026-2027 年发布)

C++26 是当前 C++ 标准委员会(WG21)正在制定的重磅版本,目前处于“功能冻结”临近阶段。以下是一些已经投票进入 C++26 草案的重要特性:

特性 说明
反射(Reflection) ^ 操作符 + std::meta 命名空间,C++ 史上最受期待的特性之一
Contracts(合约) 前置/后置条件检查,经过多年争论终于落地
std::execution(Senders/Receivers) 标准异步模型,统一 async/await/协程/线程池
std::hive 高性能、稳定迭代器的容器(类似 Colony)
std::simd 显式 SIMD 编程接口
std::debugging 调试支持库
模式匹配(Pattern Matching) inspect 表达式(已进入 C++26 草案,但仍有争议)
std::inplace_vector 栈上定容向量
constexpr 进一步扩展 更多标准库函数支持编译期计算
线性代数 <linalg> 基于 mdspan 的基础线性代数
std::text_encoding Unicode 文本编码支持

当前状态:

  • C++26 的**功能冻结(Feature Freeze)**节点原定 2025 年中,预计 2026 年底或 2027 年初正式发布
  • 反射和 Contracts 是 C++26 的“头条特性”,将从根本上改变 C++ 的元编程和接口设计方式
  • GCC 14+ 和 Clang 18+ 已开始实验性支持部分 C++26 特性(需 -std=c++26 和实验性头文件)

总结速查表

语言 最新正式标准 发布年份 下一版 预计时间
C C23 (ISO/IEC 9899:2024) 2024 C2y ~2029
C++ C++23 (ISO/IEC 14882:2024) 2024 C++26 2026末–2027初

对 STC MCU 开发者的实际影响:

STC 常用的 Keil C51/C251 编译器主要基于 C89/C99 子集,部分支持 C11,不支持 C23。而如果使用 GCC(如 SDCC 或 PlatformIO 环境),则可以使用较新的标准。对于 STC AI 助手生成的代码,通常目标是最兼容的 C89/C99 语法,以确保在所有编译器下都能通过。

回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
 楼主| 发表于 2026-8-14 16:03:51 | 显示全部楼层
Clang / LLVM
回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25122
 楼主| 发表于 2026-8-14 16:04:17 | 显示全部楼层

Clang / LLVM 全景解析

一、基本定义

LLVMClang 是两个紧密相关但概念不同的东西:

名称 定位 说明
LLVM 编译器基础设施(框架) 最初是 "Low Level Virtual Machine" 的缩写,但现在官方已不再将其视为缩写,而是一个独立品牌名。提供模块化的编译器后端、优化器、代码生成器
Clang C/C++/Objective-C 前端 LLVM 项目旗下的编译器前端,负责将 C、C++、ObjC 源码解析为 LLVM 中间表示(IR),再由 LLVM 后端优化和生成机器码

简单理解:

源代码 (.c/.cpp)
    ↓
[Clang 前端]   ← 语法解析、语义分析、生成 LLVM IR
    ↓
[LLVM 优化器]  ← 平台无关的优化 Pass
    ↓
[LLVM 后端]    ← 生成目标机器码(x86、ARM、RISC-V、8051...)
    ↓
可执行文件/目标文件

二、LLVM 的架构优势:为什么它改变了编译器世界

LLVM 的核心设计哲学是模块化可复用性

┌─────────────────────────────────────────────────────┐
│                Clang 前端(C/C++/ObjC)              │
├─────────────────────────────────────────────────────┤
│              Rust 前端(rustc)                      │
├─────────────────────────────────────────────────────┤
│              Swift 前端                             │
├─────────────────────────────────────────────────────┤
│              Julia 前端                             │
├─────────────────────────────────────────────────────┤
│              Fortran 前端(flang)                   │
├─────────────────────────────────────────────────────┤
│                      ↓                              │
│              LLVM IR(中间表示)                      │
│                      ↓                              │
│             优化器(通用优化 Pass)                    │
│                      ↓                              │
│      x86 后端 │ ARM 后端 │ RISC-V 后端 │ 8051 后端   │
└─────────────────────────────────────────────────────┘

关键优势:

  1. 一次前端,多平台后端:用 Clang 写的代码,可以通过 LLVM 后端生成 x86、ARM、RISC-V、WebAssembly 等几乎所有主流平台的机器码。
  2. 多语言共享优化:Rust、Swift 等语言都构建在 LLVM 之上,共享同一套优化器和代码生成器。LLVM 的优化改进惠及所有语言。
  3. 极佳的诊断信息:Clang 的编译错误和警告信息被公认为业界最好,彩色输出、精确的代码定位、修复建议,远优于传统 GCC。
  4. 模块化架构:可以作为库嵌入到 IDE、静态分析工具、语言服务器等中。

三、Clang 的具体能力

1. 支持的语言标准(截至 2026 年)

语言 支持情况
C 完整支持 C89 → C23,部分 C2y 实验性支持
C++ 完整支持 C++98 → C++23,C++26 实验性支持(-std=c++26
Objective-C / ObjC++ 完整支持
OpenCL / CUDA 支持 GPU 计算
其他 可作为 Swift、Rust 等语言的后端

2. 关键编译选项

# 指定语言标准
clang -std=c11 program.c
clang -std=c++23 program.cpp
clang -std=c2y program.c        # 实验性

# 优化级别
clang -O0 program.c    # 不优化(调试)
clang -O1 program.c    # 基本优化
clang -O2 program.c    # 标准优化(最常用)
clang -O3 program.c    # 激进优化
clang -Os program.c    # 优化代码体积(嵌入式推荐)
clang -Oz program.c    # 极致体积优化

# 警告
clang -Wall -Wextra -Wpedantic program.c
clang -Werror program.c   # 警告视为错误

# 生成 LLVM IR
clang -S -emit-llvm program.c    # 生成 .ll 文件

# 交叉编译
clang --target=arm-none-eabi -c program.c
clang --target=riscv64-unknown-elf -c program.c

3. Clang 工具链生态

工具 功能
clang 编译器前端
clang++ C++ 编译器前端
clang-format 代码格式化工具
clang-tidy 静态分析 + 代码检查
clangd 语言服务器(IDE 集成)
clang-check 语法检查
clang-query AST 查询
scan-build 静态分析驱动
lld LLVM 的链接器
lldb LLVM 的调试器
llvm-mca 机器码性能分析
llvm-cov 代码覆盖率

四、Clang/LLVM 在嵌入式/MCU 领域的地位

这是与 STC MCU 开发者最相关的部分。

1. 对 8051 架构的支持

传统上,8051 单片机(包括 STC 系列)主要使用 Keil C51 编译器。但 LLVM 生态也在逐步渗透:

编译器 8051 支持 说明
Keil C51/C251 原生支持 8051 事实标准,商业软件,STC 官方推荐
SDCC 原生支持 开源 8051 编译器,支持 STC 大部分型号
LLVM/Clang 实验性/有限支持 LLVM 有一个 MCS-51 后端,但成熟度远不如 ARM/RISC-V

LLVM 对 8051 的现状:

  • LLVM 官方仓库有 MCS-51 后端(基于 LLVM 的 Experimental Target)
  • 主要用于学术研究和小规模实验,不适合生产级 STC 开发
  • 优化质量和代码密度不如 Keil 或 SDCC(针对 8051 的特定优化较少)
  • 缺少对 STC 特有外设(如 STC8H 的增强型 PWM、USB 等)的专门支持

结论: 截至 2026 年,STC MCU 开发仍以 Keil C51/C251 为主力,SDCC 为开源替代,Clang/LLVM 对 8051 的支持尚未成熟到可替代前两者

2. 在 ARM Cortex-M 领域的统治地位

对于 STM32、RP2040、ESP32 等 ARM 内核 MCU,Clang/LLVM 已经是事实标准之一

  • ARM 官方:Arm Compiler for Embedded(armclang)就是基于 LLVM 构建的
  • PlatformIO:默认使用 Clang 或 GCC
  • Zephyr RTOS:支持 Clang 构建
  • Rust 嵌入式:完全依赖 LLVM 后端

3. 在 RISC-V 领域的核心地位

RISC-V 架构的崛起与 LLVM 密不可分:

  • RISC-V 的参考工具链就包含 LLVM/Clang
  • 几乎所有 RISC-V MCU(如 CH32V 系列、ESP32-C3/C6)都支持 Clang 编译
  • Rust 在 RISC-V 上的生态完全基于 LLVM

五、Clang vs GCC:两大阵营对比

维度 Clang/LLVM GCC
许可证 Apache 2.0(宽松) GPLv3(传染性)
诊断信息 ★★★★★ 业界最佳 ★★★★ 近年大幅改进
编译速度 较快(模块化设计) 略慢
代码优化 与 GCC 互有胜负 与 Clang 互有胜负
平台支持 极广(x86/ARM/RISC-V/GPU/WASM) 极广(几乎一切有 CPU 的地方)
8051 支持 实验性 无(需 SDCC)
厂商采用 Apple、Google、ARM、Sony、任天堂 Linux 内核、多数 Linux 发行版
错误恢复 极好(继续编译以发现更多错误) 较弱
模块化/嵌入 极好(可作为库使用) 困难

六、生态中的“明星项目”

基于 LLVM/Clang 构建的重要项目:

项目 说明
Rust 编译器(rustc) 完全基于 LLVM
Swift 编译器 完全基于 LLVM
Julia 基于 LLVM JIT
Kotlin/Native 基于 LLVM
CUDA(NVIDIA) 基于 LLVM 的 NVPTX 后端
AMD ROCm 基于 LLVM 的 AMDGPU 后端
Apple Xcode 默认使用 Clang/LLVM
Android NDK 默认使用 Clang
Chrome/Firefox 使用 Clang 构建
TensorFlow/PyTorch 使用 LLVM 进行 JIT 编译(XLA/TVM)

七、总结

Clang/LLVM 的行业地位:

  • 通用计算(桌面、服务器、移动端)领域,Clang/LLVM 与 GCC 平分秋色,在 Apple 生态中是唯一编译器,在 Android 生态中是默认编译器
  • 新兴架构(RISC-V、WebAssembly、GPU)领域,LLVM 是绝对核心,几乎所有新架构的软件生态都优先基于 LLVM 构建。
  • 传统 8051 MCU(如 STC)领域,LLVM 的成熟度还不够,Keil 和 SDCC 仍是最优选择。但如果你使用 STC32(ARM 内核)或未来的 RISC-V 内核 MCU,Clang/LLVM 是可以考虑的编译工具链。

一句话: Clang/LLVM 是过去 20 年编译器领域最具颠覆性的项目,它把编译器从“黑盒工具”变成了“可编程的基础设施”,并成为几乎所有新语言和新架构的首选后端。

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-23 16:02 , Processed in 0.067536 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表