C语言标准:从K&R到C23,全面解析C标准的演进与应用

C语言标准,ANSI C,ISO C,GNU C 丹尼斯·里奇(Dennis Ritchie)于1969年在 AT&T 贝尔实验室编写Unix 操作系统,实现该系统的程序语言就是C语言,因此里奇是C语言之父与UNIX之父,后面的Linux、Window、MAC OS都是基于UNIX进行开发的。 1、 K&R C标准 1978年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)出版了《The C Programming Language》这本书,作为C语言的非正式标准,称为K&a. 阅读详情

目录

引言

1. C语言标准的演进历程

2. K&R C(1978年)

2.1 特点

2.2 应用场景

3. ANSI C(C89/C90,1989年)

3.1 特点

3.2 应用场景

4. C99(1999年)

4.1 特点

4.2 应用场景

5. C11(2011年)

5.1 特点

5.2 应用场景

6. C17(2017年)

6.1 特点

6.2 应用场景

7. C23(2023年)

7.1 特点

7.2 应用场景

8. 总结


🌈你好呀!我是 程序猿

🌌 2025感谢你的陪伴与支持 ~

🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!


引言

        C语言自1972年诞生以来,经历了多次标准化过程。每一次标准的更新都带来了新的特性、改进和优化,使得C语言能够适应不断变化的编程需求。本文将详细罗列所有C语言标准,并深入探讨每个标准的特点、应用场景以及对C语言发展的影响。


1. C语言标准的演进历程

C语言的标准主要由以下几个版本组成:

  1. K&R C(1978年)

  2. ANSI C(C89/C90,1989年)

  3. C99(1999年)

  4. C11(2011年)

  5. C17(2017年)

  6. C23(2023年)

接下来,我们将逐一介绍这些标准的特点和应用场景。


2. K&R C(1978年)

2.1 特点

  • 非正式标准:K&R C并不是一个正式的标准,而是由丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯尼汉(Brian Kernighan)在《C程序设计语言》一书中描述的C语言版本。

  • 基础语法:K&R C定义了C语言的基本语法和特性,包括变量声明、函数定义、控制结构等。

  • 缺乏标准化:由于没有统一的标准,不同编译器的实现存在差异,导致代码的可移植性较差。

2.2 应用场景

  • 早期UNIX开发:K&R C主要用于UNIX操作系统的开发和移植。

  • 教学与学习:作为C语言的起源,K&R C仍然是学习C语言历史的重要参考。


3. ANSI C(C89/C90,1989年)

3.1 特点

  • 首次标准化:ANSI C是C语言的第一个正式标准,由美国国家标准协会(ANSI)制定,后来被国际标准化组织(ISO)采纳为ISO/IEC 9899:1990,因此也称为C90。

  • 标准化语法:ANSI C统一了C语言的语法和库函数,提高了代码的可移植性。

  • 新增特性:引入了函数原型、void类型、const关键字等新特性。

3.2 应用场景

  • 跨平台开发:ANSI C的标准化使得C语言成为跨平台开发的首选语言。

  • 商业软件开发:许多商业软件和操作系统开始采用ANSI C进行开发。


4. C99(1999年)

4.1 特点

  • 现代化改进:C99标准引入了许多现代化特性,使得C语言更加适合现代编程需求。

  • 新特性:

    • 单行注释:支持//单行注释。

    • 变长数组:允许在栈上分配变长数组。

    • 布尔类型:引入了_Bool类型和stdbool.h头文件。

    • 复合字面量:允许在表达式中直接创建匿名结构体或数组。

    • 内联函数:支持inline关键字,用于定义内联函数。

4.2 应用场景

  • 科学计算:C99的变长数组和内联函数特性使其在科学计算领域得到广泛应用。

  • 嵌入式系统:C99的现代化特性使得其在嵌入式系统开发中更加高效。


5. C11(2011年)

5.1 特点

  • 多线程支持:C11引入了多线程支持,包括<threads.h>头文件和原子操作支持。

  • 新特性:

    • 泛型编程:引入了_Generic关键字,支持泛型编程。

    • 匿名结构体和联合体:允许在结构体和联合体中定义匿名成员。

    • 边界检查函数:引入了<stdbounds.h>头文件,用于边界检查。

5.2 应用场景

  • 并发编程:C11的多线程支持使其在并发编程领域得到广泛应用。

  • 高性能计算:C11的泛型编程和原子操作特性使其在高性能计算中更加高效。


6. C17(2017年)

6.1 特点

  • 小幅度更新:C17主要是对C11的小幅度更新和修正,没有引入重大新特性。

  • 错误修复:修复了C11标准中的一些错误和不明确之处。

  • 兼容性:C17完全兼容C11,确保了代码的向后兼容性。

6.2 应用场景

  • 稳定开发:C17适用于需要稳定性和兼容性的项目。

  • 嵌入式系统:C17的稳定性和兼容性使其在嵌入式系统开发中仍然具有重要地位。


7. C23(2023年)

7.1 特点

  • 现代化改进:C23标准进一步现代化了C语言,引入了许多新特性。

  • 新特性:

    • 属性语法:引入了[[attributes]]语法,用于指定函数或变量的属性。

    • 改进的泛型支持:增强了_Generic关键字的支持。

    • 新的库函数:引入了许多新的库函数,如strdup、strndup等。

7.2 应用场景

  • 现代软件开发:C23的现代化特性使其在现代软件开发中更加高效。

  • 高性能计算:C23的改进泛型支持和新的库函数使其在高性能计算领域具有更大潜力。


8. 总结

        C语言标准的每一次更新都带来了新的特性和改进,使得C语言能够适应不断变化的编程需求。从K&R C到C23,C语言经历了从非正式标准到现代化编程语言的演进过程。无论是操作系统、嵌入式系统,还是高性能计算,C语言都以其高效性、底层控制能力和广泛的应用领域,继续在计算机科学领域占据重要地位。


        最后,希望通过这篇文章,你能更好地理解C语言标准的演进历程及其应用场景。无论你是初学者还是资深开发者,掌握C语言的标准和特性都将为你的编程生涯打下坚实的基础。


  ​期待批评指正,共同进步~

从K&R到C23:矩阵乘法代码的现代化改造之路 C语言作为系统级编程的基石,其标准历经K&R、C99到C23的演进,反映了计算机体系结构和编程范式的变革。编译器优化技术从早期的register关键字提示发展到现代的自动向量化,通过restrict限定符和SIMD指令实现性能飞跃。在数值计算领域,矩阵乘法这类基础算法既考验语言特性掌握程度,又体现硬件架构认知深度。通过分析一段2003年的遗留代码,可以清晰看到从K&R风格函数声明到现代C标准的迁移路径,以及内存对齐、多线程等工程实践要点的演进。代码现代化过程中,现代编译器对朴素算法的自动优化能力往往超出预期 阅读详情

相关推荐

C、Java与Python:三大编程语言的核心差异与应用场景

编程语言作为软件开发的基础工具,其设计哲学与实现原理直接影响工程实践效果。静态编译型语言如C通过直接操作内存和硬件资源,在系统编程和嵌入式领域保持不可替代的地位;Java凭借JVM虚拟机和强大的类型系统,构建了企业级应用的标准生态;Python则以动态特性和丰富的库支持,成为数据科学与快速开发的首选。理解内存管理机制(如GC与手动管理)、类型系统(静态/动态)和并发模型(线程/协程)等核心概念,能帮助开发者根据性能需求、团队协作和项目规模等因素,合理选择技术栈。在微服务、物联网和AI等现代技术场景中,这三种

weixin_30254435的博客 375

关于编译的重要概念总结

GNU 是一个计划或者叫运动。在这个旗帜下成立了 FSF,起草了 GPL 等。GNU操作系统是一种由自由软件构成的类 Unix 操作系统,该系统基于 Linux 内核,目标在于建立一个完全相容于UNIX的自由软件环境。当时Unix 系统开始收费和商业闭源了。针对这一现象,Richard Stallman发起了 GNU 计划,模仿 Unix 的界面和使用方式,从头做一个开源的版本。他自己做了编辑器 Emacs 和编译器 GCC。接下来开发者实现了包括核心的 gcc 和 glibc。

timerring的博客 8万+

C++初步认识

C自定义类型为结构体,定义结构体变量时,需加关键字struct。C++自定义类型为类,创建类的实例时,不需要加关键字class。

shijiyingjie的博客 5502

51c~C语言~合集1

C 语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为 ASCⅡ 文件和二进制文件。文件的操作包括:文件的打开、文件的关闭、文件的读写操作、文件状态检查以及文件的定位等。1 文件的打开1.1 函数原型1.2 功能说明按照 mode 规定的方式,打开由 pname指定的文件。此时如 mode 规定按写方式打开文件,就按由pname 指定的名字建立一个新文件;此时如 mode 规定按读方式打开文件,就会产生一个错误;

whaosoft~aiotの开发板商城 1万+

C语言的未来:C23标准的崭新篇章

在编程语言的浩瀚星空中,C语言无疑是一颗璀璨的恒星。自1972年诞生以来,它以其简洁、高效的特性,成为无数程序员的心头好。从操作系统到嵌入式设备,C语言的身影无处不在。而如今,C语言迎来了它的最新标准——C23(ISO/IEC 9899:2024)。这次更新不仅是一次技术上的革新,更是对现代编程需求的深刻回应。C语言的标准化始于1989年(C89),随后经历了多次更新:C99、C11、C17(也称C18),直到今天的C23。每一次标准的发布,都为C语言注入了新的活力。C23的制定始于2016年,最初被称为C

步子哥的博客 4372

STM32串口DMA双缓冲机制实战:提升数据传输效率的终极方案

本文深入解析了STM32串口DMA双缓冲机制的核心原理与实战配置。通过对比传统中断方式,阐述了双缓冲如何实现数据接收与处理的“无缝接力”,从而在工业传感器数据采集等高负载场景下,将CPU占用率降至极低水平并彻底避免数据丢失。文章提供了基于标准外设库的详细配置步骤、中断处理逻辑及性能实测数据,是提升嵌入式系统串口通信效率和可靠性的终极方案。

weixin_29192365的博客 80

1 C 语言核心认知与全景导读:程序本质、语言演变、核心优势、发展历程、标准版本、应用场景

本文深度解析程序运行的底层机制与语言演进逻辑,全景梳理 C 语言从 Unix 诞生到 C23 标准化的技术脉络。文章结合 TIOBE 数据剖析其在操作系统、嵌入式及高性能计算领域的核心统治力,详解可移植性与底层控制等六大优势,助你透彻理解 C 语言作为现代软件工业基石的隐形价值与应用边界。

大模型全栈工程师 · Thanks_ks 2748

Qt5.12.12安卓开发环境搭建:Windows下避开SDK版本坑的保姆级教程

本文提供Qt5.12.12在Windows下搭建Android开发环境的详细教程,重点解决SDK版本兼容性问题,特别是cmdline-tools与JDK8的匹配陷阱。通过精准选择组件版本、手动配置路径和修复常见错误,帮助开发者高效完成环境配置,适用于Qt跨平台移动开发。

weixin_33737774的博客 542

2024年C语言标准演进:从K&R到C23的关键特性解析

本文深入解析了C语言从K&R到C23的标准演进历程,重点介绍了各版本的关键特性及其实际应用场景。从K&R C的基础语法到C99的现代化改造,再到C11的多线程支持和C23的语法增强,文章通过代码示例展示了C语言版本迭代如何提升开发效率和安全性,为开发者选择合适版本提供实用建议。

weixin_30745553的博客 404

LTE网络下的SMS收发(SMS Over SGs方案的详细流程)

关键词: IMS,SMS, LTE, MSC, MME, EPS,eNodeB, SMS Over SGs, SMS Over IMS 2G时代由于采用了比较复杂的CS/PS域架构,所以SMS(短信)作为上个世纪的产物,一直寄居在2G的CS域架构下。看看核心网的配置,其实SMS的收发还是比较复杂的。 介绍下面的信息之前你需要去百度一下这些关键词,这里我只说明比较重要的三个单元 MS 移动终端...

kevin的博客 2万+

ANSYS Discovery 2023R1 保姆级教程:手把手教你玩转几何模型参数化(附避坑指南)

本文提供ANSYS Discovery 2023R1几何模型参数化的全面教程,涵盖基础环境搭建、核心操作解析及高级应用场景。重点讲解参数化建模中的常见问题与避坑方案,帮助用户高效掌握Workbench与Discovery的协同使用技巧,提升工程仿真效率。

weixin_29204205的博客 752

[ C语言 ] 发展历程与实践标准

本文梳理了C语言从诞生到标准化的演进历程,重点分析了其与Unix系统的共生关系及对现代计算的基础性影响。丹尼斯·里奇为解决Unix移植性问题而设计的C语言,通过标准化进程(C89/C90、C99、C11、C17/C18)逐步完善,解决了代码兼容性、多线程支持等关键问题。C语言的高效性与可移植性使其成为操作系统、嵌入式系统等底层开发的核心工具,其设计理念深刻影响了后续编程语言的发展。尽管面临新语言的竞争,C语言在性能敏感领域仍保持不可替代的地位,其标准化进程也体现了工业界对稳定性的重视。

A41311141的博客 732

VMware vSphere运维管理手册

ESXi 7.0 引入了一种系统存储布局,可对大型模块和第三方组件进行灵活的分区管理和支持,同时简化了调试操作。ESXi 7.0 系统存储更改在 ESXi 7.0 之前,分区大小固定不变,除 /scratch 分区和可选 VMFS 数据存储之外,且分区号是静态的,这些限制了分区管理。在 ESXi 7.0 中,分区整合为更少且更大的可扩展分区,具体取决于所使用的引导介质及其容量。ESXi 7.0 系统存储布局包含四个分区:分区适用情况类型系统引导存储引导加载程序和 EFI 模块。FAT16。

Avenjan优快云博客 3623

C语言版本演进全解析:从K&R到C23的关键变化与工程选型指南

在日常编程开发中,编程语言的标准与实现版本常常令人困惑,而C语言作为最基础的系统级语言,其标准演进更是被许多开发者误解。理解语言标准、编译器实现与方言扩展的区别,是掌握C语言版本问题的核心前提。从K&R时代的无标准状态,到C89奠定现代语法骨架,再到C99引入stdint.h、变长数组等革命性特性,以及C11的原子操作与C23的现代化尝试,每一次版本升级都深刻影响着嵌入式开发、跨平台移植与高性能计算的工程实践。面向实际项目,如何根据目标编译器与平台约束,在C89、C17或C23之间做出合理选型,并规避未定义

weixin_31421613的博客 154

无人机飞控算法开发实战:从零到一构建企业级飞控系统

本文系统介绍了无人机飞控算法开发的完整流程,包括飞行动力学模型建立、传感器校准与数据融合、主流控制算法实现(PID、ADRC、EKF)以及企业级飞控系统架构设计。通过结合开源飞控框架(如PX4)和实际工程经验,提供了完整的代码实现示例,帮助学者从零开始掌握无人机飞控开发的核心技术。文中详细讲解了四旋翼无人机的动力学模型、传感器校准方法、EKF状态估计算法、PID和ADRC控制算法的实现,以及MAVLink通信协议的集成。最后,总结了完整的飞控系统开发流程和未来发展趋势。

全栈 3402

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1006

C语言版本迭代全解析:从K&R到C23,这些新特性你用过几个?

本文全面解析了C语言从K&R到最新C23标准的版本迭代历程,重点剖析了C99、C11、C17/C18及C23等关键版本引入的核心新特性。文章深入探讨了混合声明、单行注释、指定初始化器、原子操作、线程支持等特性如何提升代码的安全性、表达力与并发性能,并提供了在实际项目中评估编译器支持与渐进式应用这些新特性的实用策略。

k9l0m1的博客 465

vue3 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue3,nuxt3,高德地图,热力图,绘制热力图层,人流量,vue3使用高德地图实现某个区域热力图,vue3高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue3中使用高德地图渲染热力图组件,高德地图使用热力图详细教程,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅

✅ 精选推荐文章 5205

C语言学习文档(五)

本文梳理了C语言标准的最新演进路径,并展望了其在WebAssembly、嵌入式物联网及多语言混合编程等跨领域的生态融合与未来发展方向。

2401_83227843的博客 466

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C语言学习(一)——C语言简介

C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在DEC PDP-11计算机上被首次实现。C 语言是以 B 语言为基础的,B 语言大概是在 1970 年被引进的。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了C的第一个公开可用的描述,现在被称为 K&R 标准。C语言是一门通用计算机编程语言,泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式。

fyflalala的博客 812

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

c语言学习前言(翁凯)

标准版:1.:贝尔实验室的Ken Thompson(肯.汤姆森)等人开发Unix操作系统(最初用汇编语言)。:Thompson在BCPL语言基础上简化,创造了B语言(无类型,适合早期小型机)。但B语言功能有限,无法充分利用新型硬件(如PDP-11)。:Dennis Ritchie在B语言的基础上,于1972年左右设计了C语言。核心创新是引入了(如charint等)和更丰富的结构,使其既能进行高级控制,又能进行底层内存操作。2.

F_IRE_的博客 651

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言开发从入门到精通:C语言的起源与核心价值

C语言50年生命力解析(2026视角) 摘要:C语言自1972年诞生至今仍是系统级开发的核心语言。其核心价值在于:1)接近硬件的极致控制力(OS内核/嵌入式开发必备);2)性能天花板特性(高频交易/游戏引擎首选);3)最小运行时开销(IoT/MCU关键优势)。2026年C语言在操作系统、嵌入式、高性能计算领域仍不可替代,尤其适合追求底层技术穿透力的开发者。学习建议:嵌入式方向应精通C+RTOS,高性能计算需掌握C+SIMD优化。尽管Rust等新兴语言崛起,C语言"信任程序员"的哲学使其持

likuolei的博客 857

C语言学习知识点总结01

首先编写代码生成源文件→然后通过预处理对源文件的多余注释和空格,然后处理预处理的指令将.c文件生成.i文件→之后通过编译器编译生成汇编文件.s→之后在进行汇编变成目标文件也就二进制文件.obj文件→最后通过链接目标文件和库文件生成可执行的程序文件.exe。(在vscode中右击创建的.c文件选中在集成终端打开在终端中输入如下命令,输入完命令,按回车键运行。在终端中输入如下命令,输入完命令,按回车键运行。在终端中输入如下命令,输入完命令,按回车键运行。在终端中输入如下命令,输入完命令,按回车键运行。

cookie_ls的博客 469

20_02_19笔记——《你必须知道的495个C语言问题》

《你必须知道的495个C语言问题》笔记 第11章 ANSI/ISO C 11.1 什么是“ANSI C”? a: 1978年,《C程序设计语言》的第一版出版,书中介绍的C语言标准也被称作“K&R C” 1989年,美国国家标准协会(ANSI)创立了一套C的标准,即ANSI C,或C89。1990年,将C89稍微改动,变成了ISO C或叫做C90。 2000年,ANSI 发布新的C标准C99...

please_fix_的博客 289

C与C++中字符常量类型差异解析

字符常量在编程语言中是基础数据类型之一,其类型定义直接影响内存布局和运算行为。C语言基于历史原因将字符常量视为int类型,而C++则严格定义为char类型,这种差异源于两种语言不同的类型系统设计理念。理解这一原理对处理跨语言项目、内存计算和二进制兼容性至关重要。在实际工程中,这种类型差异可能导致结构体大小计算错误、模板实例化问题等隐患。通过显式类型转换、静态断言等技术手段,开发者可以规避由此引发的内存越界等严重问题。本文通过sizeof('a')的典型案例,深入分析C/C++类型系统的关键区别及其对现代软件

weixin_34161083的博客 328
上一篇: 选择C语言的理由:为什么C语言仍然是编程世界的基石?
下一篇: 使用C语言的7个步骤:从定义目标到维护代码
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿!=程序员

感谢来过,感谢有你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值