当前位置:首页 > 每日看点 > 正文内容

C的C语言标准中,有哪些值得记忆和使用的语言特性?

卡卷网12个月前 (01-07)每日看点185

我们今天使用的Windows、Linux、MacOS等作都是由一种叫做Unix的演化而来。Unix作为80年代主流的作,是整个软件工业的基础,是现代作的开山鼻祖,C语言就是为Unix而生的。

Unix和C语言的开发者是同一人,名字叫丹尼斯·里奇(DennisMacAlistairRitchie),就是下方图片上的这个人。

C语言和Unix之父——丹尼斯·里奇

2011年10月12(北京时间为10月13),丹尼斯·里奇去世,享年70岁。

C语言的诞生

1967年,26岁的丹尼斯·里奇进入贝尔实验室开发Unix,并于1969年圣诞节前推出第一个试运行版本。这个时候的Unix是用汇编语言写的,移植性非常差,要想让Unix运行在不同型号的机器上,就得针对每个型号的机器重写一遍作,这显然是一个不可能完成的任务。

为了提高通用性和开发效率,丹尼斯·里奇决定发明一种新的编程语言——C语言。紧接着,丹尼斯·里奇就用C语言改写了Unix上的C语言编译器,他的同事汤姆森则使用C语言重写了Unix,使它成为一种通用性强、移植简单的作,从此开创了计算机编程史上的新篇章,C语言也成为了作专用语言。

C89标准

到了80年代,C语言越来越流行,广泛被业界使用,从大型主机到小型微机,各个厂商群雄并起,推出了多款C语言的编译器。这些编译器根据行业和厂商自己的需求,进行了各种扩展,C语言进入了春秋战国时代,逐渐演变成一个松散杂乱的大家族。

为一C语言版本,1983年国家标准局(AmericanNationalStandardsInstitute,简称ANSI)成立了一个员会,专门来制定C语言标准。1989年C语言标准被批准,被称为ANSIX3.159-1989"ProgrammingLanguageC"。这个版本的C语言标准通常被称为ANSIC。又由于这个版本是89年完成制定的,因此也被称为C89。

后来ANSI把这个标准提交到O(国际化标准组织),1990年被O采纳为国际标准,称为OC。又因为这个版本是1990年发布的,因此也被称为C90。

ANSIC(C89)与OC(C90)内容基本相同,主要是格式组织不一样。

因为ANSI与O的C标准内容基本相同,所以对于C标准,可以称为ANSIC,也可以说是OC,或者ANSI/OC。以后大家看到ANSIC、OC、C89、C90,要知道这些标准的内容都是一样的。

目前常用的编译器,例如微软编译器、GCC、LLVM/Clang等,都能很好地支持ANSIC的内容。

C99标准

在ANSIC标准确立之后,C语言的规范在很长一段时间内都没有大的变动。1995年C程序设计语言工作组对C语言进行了一些修改,增加了新的关键字,编写了新的库,取消了原有的,并于1999年形成新的标准——O/IEC9899:1999标准,通常被成为C99。

但是这个时候的C语言编译器基本已经成熟,各个组织对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的時候,微软和orland却似乎对此不感兴趣,或者说没有足够的资源和动力来改进编译器,最终导致不同的编译器在部分语法上存在差异。

例如,ANSIC规定,局部变量要在函数开头定义,而C99取消了这个,变量可以在任意位置定义,我们将在《C语言变量的定义位置以及初始值》一节中详细介绍。

C11标准

C11标准由国际标准化组织(O)和国际电工员会(IEC)旗下的C语言标准员会于2011年底正式发布,支持此标准的主流C语言编译器有GCC、LLVM/Clang、InC++Compile等。

C11标准主要增加了以下内容:

    增加了安全函数,例如gets_s()、fopen_s()等;增加了<threads.h>头文件以支持多线程;增加了<uchar.h>头文件以支持Unicode字符集;以及其它一些细节。

C17标准

C17标准是2018年发布的C语言最新版本,有人也称它为C18标准。

和C11相,C17标准的变化并不大,主要是对C11的修正和改进,弥补C11标准中存在的问题和不足。

截止到2024年10月,C17仍是最新的C语言标准。

C23标准

继C17标准之后,下一个C语言标准称为C23,预计在今年(2024年)公布,目前公布的只有C23的案,感兴趣的读者可以率先去浏览。

和之前的标准相,C23新增了一些新特性,如:

    新增了三个十进制浮点数数据类型_Decimal32、_Decimal64和_Decimal128,对应的后缀是DF、DD和DL。支持定义二进制变量,使用0或0开头。新增了一些关键字,如ool、true、false、nullptr等。新增了一些预编译命令,如#elifdef、#elifndef、#warning、#emed。允许给enum(枚举类型)指定类型。引入了函数定义时的匿名参数。其它一些细节。

总结

现有的教程(包括书籍、视频、大学课程等)大都是针对C89编写的,这是C语言的核心,后来的C99、C11、C17和C23新增的特性并不多,只是在“打补丁”。

C89、C99和C11是几个较重要的版本,建议初学者先学习C89和C99,等到对C语言了解得较深入以后,再学习C17、C23这些较新的C语言标准。

学习C语言,推荐一套非常N的C语言教程,教程内容通俗易懂,深入浅出,既适合初学者入门,也适合程序员进阶,还适合在校生打赛:

C语言入门教程(非常详细)

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/6766.html

分享给朋友:

相关文章

有什么音乐软件可以全部免费下载歌曲?

有什么音乐软件可以全部免费下载歌曲?

作为音乐发烧友,我几乎把市面上所有的发烧碟、试音碟,全都给收藏,下载下来了!音质都是无损的,品质特别高,有5.1环绕的、有DTS的、有中文的、有英文的。大家可以看看这个音乐目录,大概有30万张专辑。有需要下载软件的朋友,可以双击屏幕,然后搓...

有哪些是你用上了mac才知道的事?

用上了高端的Mac(已退货)才知道:原来文件夹里面的文件,你看到是8个,其实可能有12个。其中3个图标重叠在一起了,另外一个被拖动到屏幕外面了。用上了高端的Mac(已退货)才知道:原来鼠标灵敏度有问题是因为系统内置了鼠标加速度,只能用控制台...

如何判断 Java 工程师的基础知识是否扎实?

我来给你出几道大题,能答对70%,你就算基础扎实了。第一部分 Java基础(27)1. 程序本质:代码是如何被执行的?CPU、操作系统、虚拟机各司何职?2. 基础语法:从CPU角度看变量、数组、类型、运算、跳转、函数等语法3. 引用类型:同...

鸿蒙到底是不是安卓套壳?

鸿蒙到底是不是安卓套壳?

把它是不是套壳先放在一边吧。我讲一个事情,大家自己判断。华为有一个应用,叫手机管家。这个手机管家对一些系统底层设置有影响:比如华为从 EMUI 9 开始不允许将第三方启动器设置为默认启动器,依靠的就是这个手机管家。为什么这么说呢?在网上搜索...

大家都是怎么把自己的粉丝增加到1000的呢?

大家都是怎么把自己的粉丝增加到1000的呢?

截至2024年10月30日,关注者总数1137人,用时80天,增速约14人/天。2024年10月30日数据2024年8月10日开始创作,连续一周,1个关注者都没有。创作第7天,得到第一个关注,7天时间,写了8篇回答。当天得到关注,激动的心情...

想入个键盘,想买机械的但是太贵,求知友推荐一款手感比较好的薄膜键盘?

想入个键盘,想买机械的但是太贵,求知友推荐一款手感比较好的薄膜键盘?

相信很多接触过286的90后朋友都和我有一样的体会,以前的机械键盘真的是让人头皮发麻,不仅敲击要非常用力,而且很吵。所以后面随着大家的生活消费水平的上升,家家户户都有电脑了,自然也不想再用打字来宣扬自己有电脑的优越感,基本上大家都换成了又轻...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。