打印
[其它应用]

C语言C90和C99溯源分析

[复制链接]
1222|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
onlycook|  楼主 | 2023-11-24 16:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 onlycook 于 2023-11-24 16:08 编辑

今天简要分享一下C语言标准的演进过程。C语言目前具有四套标准,从1989年至今逐步经过多次演进和标准化。其中C89基本就是C90,实际上是1989年发布的第一个C语言国际标准,也称为ANSI C(美国国家标准学会ANSI批准了该标准),后来ISO组织接受了这个标准,称为C90标准。C90定义了基本的语法、关键字、运算符、控制结构、数据类型、函数指针、标准库函数,如<stdio.h>中的输入输出函数(如printf和scanf)和<stdlib.h>中的内存管理函数(如malloc和free),其基本特点是比较简洁,易于移植。]但C90在某些方面较为局限,例如,没有提供新的数据类型(如long long)、布尔类型(bool)、单行注释等。C90要求变量的声明必须出现在函数的开头,即在函数的第一个语句之前,不允许在代码块的任何位置进行变量声明,如不支持在for循环中定义变量等。C99于1999年发布,它对C语言进行扩展改进,引入了新特性,如变长数组、复合字变量、指向函数的指针、内嵌式文档、新数学函数库、对可变参数的支持、单行注释等,也对程序安全性进行改进。提供了变量声明和初始化的灵活方式,放宽了申明规则,允许声明的同时进行初始化,允许在函数内部定义变量,如允许在for循环中定义和初始化变量,并提供了新的关键字如inline,及新的语句如_Pragma等。
图1. 变长数组和复合字变量说明C99典型的一些更新如下:• 新的数据类型:C99引入了long long int类型,用于支持更大的整数范围。• 布尔类型:C99引入了_Bool类型,用于表示布尔值,取值为0或1。]• 变长数组:C99允许使用变长数组,即数组长度可以在运行时动态分配。 单行注释:C99添加了//形式的单行注释,方便程序员注释单行代码。• 更多的数学函数:C99扩展了<math.h>标准库,增加了数学函数的支持。 复数支持:C99引入了对复数(complex)的支持。C11于2011年发布,它引入了一些新特性,引入了如匿名结构体、泛型选择表达式、多线程支持、线程安全函数、动态内存分配的安全性增强,对Unicode字符的支持等,主要是对现有特性进行改进和修正,提高了C语言的表达能力和可靠性。C17于2018年发布,是C语言最新版本,C17主要是对C11进行修订和更新,进一步改进语言的特性和可用性,C17引入了初始化宏,属性和线程局部存储等。
图2. XC8编译器中C90和C99的切换总之,虽然C99对C90进行了改进,但一些旧的编译器可能不完全支持C99标准,如图2中的XC8编译器界面所示说明,总的来说,C99是对C90标准的重要改进,引入了更多方便的语言特性和标准库函数,而C11和C17更新的C语言标准。

使用特权

评论回复
沙发
tpgf| | 2024-1-3 12:02 | 只看该作者
其实对于我们来说 基本体会不到他们的区别的

使用特权

评论回复
板凳
nawu| | 2024-1-3 12:10 | 只看该作者
我们现在使用的应该就是c99规范的c语言了吧

使用特权

评论回复
地板
zljiu| | 2024-1-3 16:12 | 只看该作者
这个命名方式是以发布的年份来的吧

使用特权

评论回复
5
yangxiaor520| | 2024-1-3 19:47 | 只看该作者
现在主要是C99吧

使用特权

评论回复
6
tfqi| | 2024-1-3 22:31 | 只看该作者
我希望c能像c#那样  感觉特灵活

使用特权

评论回复
7
gwsan| | 2024-1-3 23:09 | 只看该作者
现在c90的c语言是不是已经被淘汰了呢

使用特权

评论回复
8
aoyi| | 2024-1-3 23:38 | 只看该作者
总有一种感觉就是c语言相对于某些上位机语言来说 还是比较抽象的

使用特权

评论回复
9
其实规范就是让大家形成统一标准的前提

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

435

主题

1620

帖子

3

粉丝