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.