C,C99,ANSI C和GNU C有什么区别?

时间:2013-06-20 06:21:00

标签: c gcc c99 c89 ansi-c

我已经开始在codechef进行编程练习,并且对C和C99之间的差异感到困惑。 C在这里意味着什么?是C89吗?检查this submit底部的语言。它包含C和C99。

我在网上发现了一个名为GNU C的东西。对于linux / unix系统有不同的C吗?这些是否符合ANSI的C标准?我也在一些地方读过“C99严格”。这是什么?

是否还有其他不同的C标准?有什么叫做C 4.3.2还是当前使用的gcc版本?

编辑:

ThisThisThis有所帮助。我会搜索更多内容并编辑未经答复的内容。

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

5 个答案:

答案 0 :(得分:187)

  • 标准化之前的一切通常被称为“K& R C”,在famous book之后,与C语言的发明者Dennis Ritchie一起作为作者之一。这是1972年至1989年的“C语言”。

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

  • 一年后,美国标准被国际认可并由ISO(ISO 9899:1990)出版。此版本称为C90。从技术上讲,它与C89 / ANSI-C的标准相同。在形式上,它取代了C89 / ANSI-C,使它们过时了。从1990年到1999年,C90是“C语言”。

    请注意,自1989年以来,ANSI与C语言没有任何关系。程序员仍然在谈论“ANSI C”一般都不知道它意味着什么。 ISO通过标准ISO 9899“拥有”C语言。

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

  • 1999年,C标准进行了重大修订(ISO 9899:1999)。此版本的标准称为C99。从1999年到2011年,这是“C语言”。

  • 2011年,C标准再次发生变化(ISO 9899:2011)。这个版本叫做C11。语言中添加了_Generic_Static_assert和线程支持等各种新功能。该更新主要关注多核,多处理和表达序列。从2011年到2017年,这是“C语言”。

  • 2017年,C11进行了修订,各种缺陷报告得以解决。该标准非正式地称为C17,并作为ISO 9899:2018发布。它不包含任何新功能,只是更正。它是C语言的当前版本。


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

“GNU C”可能意味着两件事。 C编译器本身作为GNU编译器集合(GCC)的一部分。或者它可能意味着GCC C编译器使用的非标准默认设置。如果使用gcc program.c进行编译,则不会根据C标准进行编译,而是根据非标准GNU设置进行编译,这可能被称为“GNU C”。例如,整个Linux内核使用非标准GNU C,而不是标准C。

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

答案 1 :(得分:6)

我必须回应ANSI C.虽然ANSI没有对它做任何事情,但编译器仍然是为它构建的。 PIC XC16编译器例如:    "编译器是完全验证的编译器,符合ANSI C     ANSI规范(ANSI x3.159-1989)定义的标准     在Kernighan和Ritchie的The C Programming Language中描述(第二部分     版)。 ..." 不是所有的编程都适用于"大" PC这样的电脑。为您的设备成本编写编译器,并验证成本时间和时间。 $。 ANSI C是活着的&好吧& 住在嵌入式/实时设备中。

答案 2 :(得分:5)

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

  • C99:
    根据开发人员的要求,在1999 - 2000年,C99中还包括了其他关键字和功能(例如:内联,布尔..添加了浮点运算库函数)

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

ANSI C是由其他标准使用或参考的标准。

答案 3 :(得分:1)

除了Lundin Answer

以下是Dennis Richie在被问到时Say的问题

“为什么K& R在编写K& R第二版之前没有等待最终的,经过批准的ANSI标准?”

  

为什么K& R在写作之前不会等待最终批准的ANSI标准   K& R第2版?看来这本书只是正确的标准   几个月前它将被最终的ANSI标准所取代。我知道   在这个晚期可能没有什么重大变化,但为什么不呢   等几个月,确保你100%正确,而不是需要   几乎立即写第3版或过时了?

     
    

我们认为庆祝成立十周年会很棒     第一版     更严重的是,我们去年夏天开始工作,因为我们有     那么时间和倾向,似乎X3J11正在接近     结束。在12月和1月,当我们完成时,我们考虑了     重要变化的可能性是否值得推迟     交付,(与出版商讨论此事后)     决定不值得等待。 P-H想要它,两者都想要     布莱恩和我希望它不在我们的议程中。

         

即使标准有变化,也很难想象     它们足够广泛以保证新版本。     (我们甚至准备以某种方式处理诺里亚,如果它持续了。)     我们准备在未来的印刷中做出必要的改变,     但有理由希望它们应该是次要的。 X3J11的     成员们也非常渴望完成而不会让人感到惊讶;     其中许多适用于准备ANSI编译器的公司,     毕竟。

         

Dennis Ritchie

  

答案 4 :(得分:-3)

这个问题没有在网上彻底搜索到答案,无论如何你可能会看到这个:

  1. C是最初开发的通用编程语言 Dennis Ritchie于1969年至1973年间在AT& T贝尔实验室工作。
  2. C99是ISO发布的C语言的标准,并且在1999年左右被ANSI采用。
  3. GNU C只是c89的扩展,同时还添加了c99的一些功能,但整体上它与c99标准不同,因此在gcc中编译时我们必须输入-std=c99,这已在其他答案。
  4. ANSI C是ANSI发布的一系列连续标准。