C23:现代化语法与库能力
C23 是当前正式发布的 C 语言标准,对类型推导、常量表达、空指针、预处理和整数表示等多个方面进行了现代化。WG14 将其列为 ISO/IEC 9899:2024。
代表变化
nullptr与nullptr_t:类型明确的空指针常量。typeof/typeof_unqual:从表达式或类型获取类型。constexpr对象:声明可用于常量表达式的对象。auto对象类型推导。#embed:在翻译期嵌入二进制资源。- 二进制整数字面量与数字分隔符。
- 标准属性语法
[[...]]。 - 两补码整数表示成为标准要求,并继续改进枚举、位精确整数和标准库。
类型推导与常量对象
c
#include <stddef.h>
#include <stdio.h>
int main(void) {
constexpr int default_port = 8080;
auto port = default_port;
typeof(port) backup_port = 8081;
int *connection = nullptr;
printf("port=%d backup=%d connected=%s\n",
port,
backup_port,
connection == nullptr ? "no" : "yes");
return 0;
}这些写法与 C++ 中同名功能有相似之处,但仍应按照 C23 自己的类型规则理解,不能直接套用 C++ 语义。
二进制字面量
c
#include <stdio.h>
int main(void) {
unsigned permissions = 0b111'101'101;
printf("permissions=%o\n", permissions);
return 0;
}编译器对 C23 各项功能的落地可能分阶段完成。构建系统应针对目标编译器验证 -std=c23;较早的编译器可能使用实验阶段名称 -std=c2x,也可能只实现部分特性。
返回:C & C++ 总览。
版本信息与迁移
- 发布时间 / 标准时间: 2024 年(ISO/IEC 9899:2024)
- 维护状态: 截至 2026-08-27,以页面所链接的官方生命周期或规范状态为准
- 运行时或平台基线: 编译器对目标 ISO C/C++ 标准及所用标准库的实现支持
迁移影响: 升级构建标准前,必须在全部目标编译器上开启对应 -std= 选项,处理被收紧或删除的语法、标准库差异和 ABI 边界,并保留旧工具链回归构建。
版本确认
bash
gcc --version
clang --version资料核对日期:2026-08-27。