1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

我们在很多地方都有看到过K&R C、ANSI C、ISO C、C89、C99、C11等标准,具体有什么不同呢?(文末有个很好的实例)

什么是K&R C?

1978年,丹尼斯•里奇(Dennis Ritchie)和布莱恩•柯林汉(Brian Kernighan)合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被称作“K&R C”。

什么是ANSI C、ISO C、C89、C90标准?

随着C语言使用得越来越广泛,出现了许多新问题,人们日益强烈地要求对C语言进行标准化。1983年,美国国家标准协会(ANSI)组成了一个委员会,X3J11,为了创立 C 的一套标准。经过漫长而艰苦的过程,该标准于1989年完成,这个版本的语言经常被称作ANSI C,或有时称为C89(为了区别C99)。在1990年,ANSI C标准(带有一些小改动)被美国国家标准协会(ANSI)采纳为ISO/IEC 9899:1990。这个版本有时候称为C90或者ISO C。综上,ANSI C、ISO C、C89、C90其实是同一种标准。

什么是C99标准?

2000年3月,ANSI 采纳了 ISO/IEC 9899:1999 标准。这个标准通常指C99。 C99新增了一些特性,如:支持不定长的数组,即数组长度可以在运行时决定。变量声明不必放在语句块的开头,for语句提倡写成for(int i=0;i<100;++i) 的形式,即i只在for语句块内部有效。

什么是C11标准?

C11标准是C语言标准的第三版(2011年由ISO/IEC发布),前一个标准版本是C99标准。与C99相比,C11有哪些变化呢?

1、 对齐处理:alignof(T)返回T的对齐方式,aligned_alloc()以指定字节和对齐方式分配内存,头文件<stdalign.h>定义了这些内容。2、 _Noreturn:_Noreturn是个函数修饰符,位置在函数返回类型的前面,声明函数无返回值,有点类似于gcc的__attribute__((noreturn)),后者在声明语句尾部。3、 _Generic:_Generic支持轻量级范型编程,可以把一组具有不同类型而却有相同功能的函数抽象为一个接口。4、 _Static_assert():_Static_assert(),静态断言,在编译时刻进行,断言表达式必须是在编译时期可以计算的表达式,而普通的assert()在运行时刻断言。5、安全版本的几个函数:gets_s()取代了gets(),原因是后者这个I/O函数的实际缓冲区大小不确定,以至于发生常见的缓冲区溢出攻击,类似的函数还有其它的。6、 fopen()新模式:fopen()增加了新的创建、打开模式“x”,在文件锁中比较常用。7、 匿名结构体、联合体。8、 多线程:头文件<threads.h>定义了创建和管理线程的函数,新的存储类修饰符_Thread_local限定了变量不能在多线程之间共享。9、 _Atomic类型修饰符和头文件<stdatomic.h>。10、改进的Unicode支持和头文件<uchar.h>。11、quick_exit():又一种终止程序的方式,当exit()失败时用以终止程序。12、复数宏,浮点数宏。13、time.h新增timespec结构体,时间单位为纳秒,原来的timeval结构体时间单位为毫秒。

下面看一段程序:

#include <stdio.h>int main(void)
{// C99允许在for循环内定义循环变量,而C89不允许for (int i = 0; i < 5; i++)    {printf("hello world!\n");}return 0;
}

C89标准下编译,结果为:

编译报错原因为,在C89标准下,循环变量不能在for循环内定义,必须把标准改为C99标准才可正常编译。以C99标准编译的命令为:

gcc -std=c99 test.c -o test.exe

(关于如何配置gcc编译环境可查看往期笔记:gcc环境配置)

如下图,以C99编译能成功编译:

所以在平时的开发中应该要了解编译器支持什么标准。因为,有时候编译出错是因为当前编译器支持的标准不同。

GCC编译器在编译的时候可指定C语言标准:

指定c90标准: -std=c90指定C99标准: -std=c99定C11标准: -std=c11

以上就是关于C语言标准的一点总结笔记,如有错误欢迎指出!

C语言 | 什么是ANSI C标准?相关推荐

  1. ansi c标准_C语言为什么需要有标准库

    标准库是 ANSI C 语言标准的一个重要组成部分.在 ANSI C 标准之前,不同的 C 系统都提供了库,其中包含许多常用功能函数,以及相关的类型与变量定义.随着发展,不同 C 系统所提供的库之间的 ...

  2. ansi c标准_C/C++的起源与发展故事,我是最牛的软件编程语言,不接受反驳

    C语言和C++语言绝对是计算机软件界最经典和坚挺的编程语言,不论多少语言走完了诞生.发展.消亡的生命历程,这两种语言依然保有旺盛的生命力.而两者之间的关系,说是继承也好.扩展也好.父子也好,总之是有千 ...

  3. C/C++编程:什么是ANSI C标准?

    我们在很多地方都有看到过K&R C.ANSI C.ISO C.C89.C99.C11等标准,具体有什么不同呢?(文末有个很好的实例) 什么是K&R C? 1978年,丹尼斯•里奇(De ...

  4. 《C专家编程》一1.9 阅读ANSI C标准,寻找乐趣和裨益

    本节书摘来自异步社区<C专家编程>一书中的第1章,第1.9节,作者 [美]Perter Van Der Linde,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  5. 初识ANSI C标准

    C/C++学习笔记之十 ANSI C 主要标准化了现存的实践, 同时增加了一些来自 C++ 的内容 (主要是函数原型) 并支持多国字符集 (包括备受争议的三字符序列). ANSI C 标准同时规定了 ...

  6. c语言程序设计实践课程,《C语言程序设计》实践课程标准.doc

    <C语言程序设计>实践课程标准 锨它祷领奔溺扛格墅叼抖克忿酪服编谢孔素哎坤灶鸭叉切涎秧乐岸衔吟丧猴摘役阀诈连贾若沁锗秆选翼剖显沸荔脾钧愈笺擎炕核撒哟助宴佐工叉浩憎躺百袍晓拘斋蓉弄恤庶磐膘比 ...

  7. 【C语言督学训练营 第二天】C语言中的数据类型及标准输入输出

    文章目录 一.前言 二.数据类型 1.基本数据类型 ①.整形 ②.浮点型 ③.字符型 2.高级数据类型 3.数据分类 ①.常量 ②.变量 三.标准输入输出 1.scanf 2.printf 四.进制转 ...

  8. C语言:输出身高和标准身高的对照表,身高范围和间隔距离可输入

    采用C语言:输出身高和标准身高的对照表,身高范围和间隔距离可输入,假设标准(身高-80)*0.7和(身高-80)*0.6分别为男女标准体重.最终实现的效果如图所示: 代码如下: int main() ...

  9. C专家编程 第1章 C:穿越时空的迷雾 1.9 阅读ANSI C标准,寻找乐趣和裨益

    阅读ANSI C标准,寻找乐趣和裨益      int foo(const char **p) {     }     编译这段代码,编译器会发出一条警告信息:      int main(int a ...

最新文章

  1. Visio替代图表工具 - 为什么Visual Paradigm Online?
  2. TCP释放连接后实现端口的立即复用
  3. SpringBoot非官方教程 | 第二篇:SpringBoot配置文件详解
  4. arm linux 核心板 制作,Linux下制作给ARM开发板使用的文件系统
  5. Windows 7 蓝屏代码大全 amp; 蓝屏全攻略
  6. js遍历Object所有属性
  7. java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?
  8. LeetCode 1186. 删除一次得到子数组最大和(DP)
  9. 华为在中国建立其全球最大的网络安全透明中心
  10. 优秀的SharePoint 2013开发工具有哪些(一)
  11. vant部署_详解VUE项目中安装和使用vant组件
  12. [python+pip] 使用pip将函数库安装到Python环境或Anaconda环境
  13. LNMP的运维追踪技巧总结
  14. php视频教程bt下载,LAMP 兄弟连原创视频光盘镜像下载—精品PHP Linux高清WMV格式视频教程全集...
  15. python爬虫:抓取某易云音乐歌曲歌词
  16. 解决 1080端口已被占用
  17. 方法重载时,需要遵循以下三条原则
  18. 数字电路仿真软件Minecraft—(3)方块更新感应电路
  19. 互联网“诸神”的排位赛,2016年会是转折点?
  20. 20考研 | 2020考研全程规划,19上岸复旦学长。各科各阶段复习规划。

热门文章

  1. 旷视科技1面2面----最差的一次面试体验
  2. VMware 安装ghost win7 gho
  3. Cocos Creator 3.0 教程! 标志板! Billboard !
  4. 对人工智能的一点看法
  5. tableau无法建立连接_外部服务连接疑难解答 - Tableau
  6. 微信动态二维码管理引流源码/微信活码/自动换群/微信朋友圈加群二维码
  7. 概率论3——古典概型与二项分布
  8. 深入 JavaScript 中的默认参数!
  9. 嗯… 无法访问此页面 www.bing.com 花了太长时间进行响应解决办法
  10. 如何在VSCode设置/取消隐藏文件