我在codechef开始编程练习,被difference between C and C99. What does C mean here? Is it C89?弄糊涂了,判断this submit下面的语言.它包含C和C99.

我在互联网上发现了一个叫做GNU C的东西.linux/unix系统有不同的C吗?这些是否符合ANSI的C标准?我也在一些地方读过"C99严格".这是什么?

还有其他不同的C标准在使用吗?是否有所谓的C4.3.2或是目前使用的gcc版本?

EDIT:

ThisThisThis起了作用.我会搜索更多内容,并编辑那些没有答案的内容.

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

推荐答案

  • Everything before standardization is generally called "K&R C", after the famous book (1st edition and 2nd edition), with Dennis Ritchie, the inventor of the C language, as one of the authors. This was "the C language" from 1972-1989.

  • 1989年,美国国家标准协会ANSI在全国范围内发布了第一个C标准.这个版本被称为C89或ANSI-C.从1989年到1990年,这是"C语言".

  • 第二年,美国标准被国际认可并由ISO发布(ISO 9899:1990).这个版本叫做C90.从技术上讲,它与C89/ANSI-C是相同的标准.在形式上,它取代了C89/ANSI-C,使其过时.从1990年到1999年,C90是"C语言".

    请注意,自1989年以来,ANSI与C语言没有任何关系.仍在谈论"ANSIC"的程序员通常对其含义一无所知.通过标准ISO9899,ISO"拥有"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或C18.它于2017年完成(使用__STDC_VERSION__=201710L),但由ISO发布为9899:2018,因此C17/C18之间存在歧义.它不包含新功能,只包含更正.它是C语言的当前版本.


"C99 strict"很可能是指编译器设置强制编译器严格遵循标准.C标准中有一个术语conforming implementation.本质上,它意味着:"这个编译器实际上正确地实现了C语言".正确实现C语言的程序正式称为strictly conforming programs.

"GNU C"可以指两件事.作为GNU编译器集合(GCC)的一部分的C编译器本身.或者它可能意味着GCC C编译器使用的非标准默认设置.如果您使用gcc program.c进行编译,那么您不会按照C标准进行编译,而是按照非标准GNU设置进行编译,这可能被称为"GNUC".例如,整个Linux内核是在非标准GNU C中制作的,而不是在标准C中制作的.

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

C++相关问答推荐

-O and -wrap的行为

如何在C中的空指针函数中传递浮点值

C:gcc返回多个错误定义,但msvc—不""'

从内联程序集调用Rust函数和调用约定

堆栈帧和值指针

将指针作为参数传递给函数

当execvp在C函数中失败时杀死子进程

警告:C++中数组下标的类型为‘char’[-Wchar-subpts]

C中的指针增量和减量(*--*++p)

C中函数类型的前向声明

为什么memcpy进入缓冲区和指向缓冲区的指针工作相同?

如何使用libgpio(d)为Raspberry Pi编译C程序?

Go和C中的数据 struct 对齐差异

通过对一个大的Malloc内存进行切片来使用Malloc的内存片

问题:C#Define上的初始值设定项元素不是常量

生成的头文件不包括用户定义的文件

Malloc和对齐

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

指向返回 struct 成员的指针,安全吗?

GnuCobol 使用 double 类型的参数调用 C 函数