跳转到正文

C23:现代化语法与库能力 ​

C23 是当前正式发布的 C 语言标准,对类型推导、常量表达、空指针、预处理和整数表示等多个方面进行了现代化。WG14 将其列为 ISO/IEC 9899:2024。

标准状态:WG14 官方主页 · 项目与里程碑

代表变化 ​

  • 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。

Released under the MIT License.