跳转到正文

C17 / C18:缺陷修订与稳定基线 ​

这一版标准在委员会工作中通常称为 C17,正式国际标准为 ISO/IEC 9899:2018,因此资料中也常写作 C18。它主要整合对 C11 的缺陷修正,没有增加一组新的大型语言特性。

参考官方标准:WG14 · C 项目与里程碑

版本定位 ​

  • 延续 C11 的语法、原子操作、线程和内存模型。
  • 将委员会对 C11 问题的处理结果整合进标准文本。
  • 适合作为希望使用现代 C、但暂时不依赖 C23 新语法的工程基线。
  • “C17”和“C18”通常不是两套不同语言功能,而是完成年份与发布年份形成的两种称呼。

为什么代码看起来仍像 C11 ​

c
#include <stdatomic.h>
#include <stdio.h>

int main(void) {
    atomic_int state = ATOMIC_VAR_INIT(0);
    atomic_store(&state, 1);
    printf("state=%d\n", atomic_load(&state));
    return 0;
}

使用 -std=c17 编译并不会突然获得大量新关键字;这一版本的价值主要是让标准文本更一致,并为编译器与工程提供稳定的修订基线。

选择建议 ​

如果依赖的编译器、静态分析器和嵌入式工具链尚未完整支持 C23,C17 往往是保守而现代的选择。代码仍应根据目标平台检查 <threads.h>、原子类型与具体库接口的实现情况。

下一版:C23。

版本信息与迁移 ​

  • 发布时间 / 标准时间: 2018 年(ISO/IEC 9899:2018)
  • 维护状态: 截至 2026-08-27,以页面所链接的官方生命周期或规范状态为准
  • 运行时或平台基线: 编译器对目标 ISO C/C++ 标准及所用标准库的实现支持

迁移影响: 升级构建标准前,必须在全部目标编译器上开启对应 -std= 选项,处理被收紧或删除的语法、标准库差异和 ABI 边界,并保留旧工具链回归构建。

版本确认 ​

bash
gcc --version
clang --version

资料核对日期:2026-08-27。

Released under the MIT License.