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。