网站首页 > 技术教程 正文
历史
1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)出版了《C 程序设计语言》的第一版。这本书因作者的首字母缩写而被称为 K&R,多年来一直是该语言的非正式规范。它所描述的 C 版本通常被称为 “K&R C”。由于这是在 1978 年发布的,现在也被称为 C78。
在 20 世纪 70 年代末和 80 年代,随着 C 版本的普及,它被广泛用于各种大型计算机、小型计算机和微型计算机,包括 IBM PC。
1983 年,美国国家标准协会(ANSI)成立了一个委员会 X3J11,以建立 C 的标准规范。1989 年,C 标准被批准为 ANSI X3.159-1989 “程序设计语言 C”。该语言版本通常被称为 ANSI C、标准 C,有时也称为 C89。
1990 年,国际标准化组织(ISO)采用了 ANSI C 标准(经过格式更改),称为 ISO/IEC 9899:1990,有时也称为 C90。因此,术语 “C89” 和 “C90” 指的是相同的编程语言。
至此以后,C 语言又衍生出了后续几个版本的标准。
C 标准 | 简介 | 发布者 | 说明 |
C89 | 首个官方 C 标准 | ANSI | |
C90 | C89 的 ISO 版本 | ISO | 有两个技术勘误表,更正了一些错误。 |
C95 | C90 的修正版 | 增加了对有向图和宽字符的支持 | |
C99 | ISO | 有三个技术勘误表 | |
C11 | ISO | 有一个技术勘误表 | |
C17 | 对 C11 的少量更新 | ISO | |
C23 | 计划于 2024 年发布 |
Gcc
Gcc 是类 Unix 系统中常见的编译器,它支持多种编程语言,也包括 C 语言。Gcc 允许使用命令行选项 -std 指定编译过程中要使用的 C 语言标准(也称 C 方言)。否则,Gcc 使用默认的 C 标准,如下表所示。
Gcc 版本 | 默认使用的 C 标准 |
3.0 - 4.9.4 | -std=gnu89 或 -std=gnu90 |
5.4.0 | -std=gnu11 |
5.5 - 10.4 | -std=gnu11 |
11.3 | -std=gnu17 |
12.2 | -std=gnu17 |
注:以 C 为前缀的 C 方言是严格 C 模式,而 GNU 前缀则表示带有 GNU 扩展。
查看默认标准
在 Linux 系统中,如果你想要查看当前 Gcc 默认使用的是哪种 C 标准,可以运行如下命令列出已经定义的预处理器符号。
$ gcc -E -dM -x c /dev/null
以 Ubuntu 16.04 为例,符号 __STDC_VERSION__ 的值是 201112L:
#define __STDC_VERSION__ 201112L
又由于符号 __STRICT_ANSI__ 没有被定义,因此该系统默认使用的是 gnu11 标准。
标准的别名
在 Gcc 用 -std 选项指定 C 标准时,这些标准往往还有其它书写形式,比如:
标准 | 其它形式 | 备注 |
-std=c90 | -ansi 或 -std=c89 或 -std=iso9899:1990 | |
-std=iso9899:199409 | C90 加上 1995 修正案 | |
-std=c99 | -std=c9x 或 -std=iso9899:1999 | |
-std=c11 | -std=c0x 或 -std=iso9899:2011 |
Gcc 的特殊选项 -pedantic
Gcc 还有一个特殊选项 -pedantic,该选项对不严格遵守 ISO C 标准要求的行为发出警告;否则,如果没有这个选项的话,某些 GNU 扩展以及传统的 C 特性也会得到支持。
猜你喜欢
- 2025-04-30 关于面向对象编程思想的一些思考(面向对象编程六大原则)
- 2025-04-30 C语言标准,ANSI C,ISO C,GNU C(c语言标准库参考手册)
- 2025-04-30 适合零基础初学者学习C语言第一课教程,揭开C语言的神秘面纱
- 2025-04-30 C语言简介(c语言简介及基础)
- 2025-04-30 C语言的来世与今生(c语言的来世与今生的区别)
- 2025-04-30 丹尼斯·斯科特获得了魔术系列的终极荣誉
- 2025-04-30 c语言的标准(c语言的标准函数名有哪些)
- 2025-04-30 这个比乔布斯还牛的男人,死后却无人问津|乔布斯逝世十周年
你 发表评论:
欢迎- 04-30关于面向对象编程思想的一些思考(面向对象编程六大原则)
- 04-30C 语言标准(c 语言标准库谁写的)
- 04-30C语言标准,ANSI C,ISO C,GNU C(c语言标准库参考手册)
- 04-30适合零基础初学者学习C语言第一课教程,揭开C语言的神秘面纱
- 04-30C语言简介(c语言简介及基础)
- 04-30C语言的来世与今生(c语言的来世与今生的区别)
- 04-30丹尼斯·斯科特获得了魔术系列的终极荣誉
- 04-30c语言的标准(c语言的标准函数名有哪些)
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)