首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C、C99、ANSI和GNU C之间的区别是什么?

C、C99、ANSI和GNU C之间的区别是什么?
EN

Stack Overflow用户
提问于 2013-06-20 14:21:00
回答 5查看 91.4K关注 0票数 141

我已经开始了在codechef上的编程实践,并被C和C99之间的差异搞糊涂了。C在这里是什么意思?是C89吗?检查this submit底部的语言。它包含C和C99。

我在互联网上找到了一种叫做GNU C的东西,有没有不同的用于linux/unix系统的C?这些标准是否符合ANSI的C标准?我在一些地方也读到过"C99 strict“。这是什么?

还有没有其他不同的C标准在使用?是不是有个叫做C 4.3.2的东西,还是现在使用的是gcc的版本?

编辑:

ThisThisThis帮了忙。我会搜索更多,并编辑未回复的内容。

我不是编程新手。我知道C语言是什么。我知道美国国家标准协会有不同的C标准,如C89,C99和C11。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-20 17:04:36

在标准化之前的一切通常被称为"K&R C",以著名的书(1st edition

  • 2nd edition)的名字命名,C语言的发明者Dennis Ritchie是作者之一。这是1972-1989年的“C语言”。

  • 第一个C语言标准于1989年由美国国家标准协会在全国范围内发布。此版本称为C89或ANSI-C。从1989年到1990年,这是“C语言”。

  • 次年,美国标准被国际标准化组织接受并由国际标准化组织发布(ISO9899:1990)。此版本称为C90。从技术上讲,它与C89/ANSI-C是相同的标准。在形式上,它取代了C89/ANSI-C,使它们过时。从1990年到1999年,C90是“C语言”。

请注意,自1989年以来,ANSI与C语言没有任何关系。仍然在谈论"ANSI C“的程序员通常对它的含义一无所知。国际标准化组织拥有C语言,通过标准ISO9899。

  • 在1995年发布了一个小更新,有时也称为"C95“。这不是重大修订,而是正式命名为ISO/IEC 9899:1990/Amd.1:1995的技术性修订。主要变化是引入了宽字符支持。

  • 在1999年,C标准经历了一次重大修订(ISO9899: 1999 )。该标准的这个版本称为C99。从1999年到2011年,这是“C语言”。

  • 在2011年,C标准再次更改(ISO9899:2011)。这个版本被称为C11。语言中添加了各种新功能,如_Generic_Static_assert和线程支持。更新的重点是多核、多处理和表达式排序。从2011年到2017年,这是“C语言”。

  • 在2017年,对C11进行了修订,解决了各种缺陷报告。该标准非正式地称为C17或C18。它于2017年完成(并使用__STDC_VERSION__ = 201710L),但由国际标准化组织发布为9899:2018,因此C17/C18之间存在歧义。它不包含新功能,只包含更正。它是C语言的当前版本。

"C99 strict“可能指的是强制编译器严格遵循标准的编译器设置。在C标准中有一个符合实现的术语。本质上它意味着:“这个编译器实际上正确地实现了C语言”。正确实现C语言的程序被正式地称为严格一致的程序。

"GNU C“有两种含义。要么是C编译器本身,要么是作为GNU编译器集合的一部分(GCC)。也可以是指GCC C编译器使用的非标准默认设置。如果您使用gcc program.c编译,那么您不会按照C标准进行编译,而是按照非标准的GNU设置进行编译,这可能被称为"GNU C“。例如,整个Linux内核都是用非标准的GNU编写的,而不是用标准的C。

如果您想要根据C标准编译程序,则应该输入gcc -std=c99 -pedantic-errors。如果您的GCC版本支持,请将c99替换为c11。

票数 250
EN

Stack Overflow用户

发布于 2016-01-28 06:29:05

我必须回应关于ANSI C的问题。虽然ANSI没有对它做任何事情,但编译器仍然构建在它之上。PIC XC16编译器例如:“该编译器是一个经过充分验证的编译器,它符合ANSI规范(ANSIx3.159-1989)定义的ANSI标准,并在Kernighan和Ritchie的the C Programming Language (第二版)中进行了描述。……”并不是所有的编程都适用于像PC这样的“大”计算机。为你的设备编写编译器需要花费大量的成本,而验证需要耗费大量的时间和$。ANSI C在你的嵌入式/实时设备中很有活力。

票数 7
EN

Stack Overflow用户

发布于 2013-06-20 15:01:49

  • ANSI :第一种C语言是在1989年由名为ANSI的组织标准化的,这就是为什么它被称为c89。
  • C99:

随着开发人员的需求,在1999-2000年中,C99中包含了更多或更多的关键字和特性(例如: inline、boolean..添加了浮点库函数)

  • GNU C: GNU是一个类unix的操作系统(www.gnu.org) &GNU的项目需要基于ANSI标准的C编程语言。GNU使用GCC (GNU编译器集合)编译器编译的代码。它具有定义系统调用的C库函数,如malloc、calloc、exit...etc

ANSI C是一个正在被其他标准使用或参考的标准。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17206568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档