Keil Logo


Information in this article applies to:

  • C166 All Versions
  • C251 All Versions
  • C51 All Versions


Keil Software and other companies say they provide "ANSI C" compilers. I've also seen references to "K&R C", "C89", "C90", "C9x", "C99", and "Standard C". What exactly do all these terms mean?


These terms are best understood with some historical context.

C was originally developed by a handful of researchers at Bell Labs in the early 1970's, along with the UNIX operating system.

For many years, the book The C Programming Language, by Brian W. Kernigan and Dennis M. Ritchie, was the de-facto standard reference for the language. This book (nicknamed K&R) was a very good and fairly complete introduction to the language, but it wasn't intended as a formal language specification.

By 1983, C had spread beyond UNIX to be used on many different platforms, and was still rapidly gaining popularity. It was time to create a platform-independent standard for C, so that it wouldn't become fragmented into dozens of severely incompatible dialects (like BASIC had).

ANSI (American National Standards Institute) published a formal standard for the language in 1989. The comittee that wrote the standard had done an excellent job, and the standard was quickly and enthusiastically accepted by almost everyone who used C. The original ANSI standard was officially called ANS X3.159-1989, but everyone called it the ANSI C standard, and the language it defined ANSI C.

To distinguish it from ANSI C, people began calling the language described in K&R K&R C. (A second edition of K&R, updated to present ANSI C, was published. It is still in print, and still one of the best introductions to C. The nickname K&R is now used to apply to either edition of the book, with terms like K&R1 and K&R2 used to distinguish them. But "K&R C" always means the pre-ANSI version of the language, i.e., a version of C without function prototypes.)

In 1990, a Joint Technical Comittee of ISO (International Standards Organization) and IEC (International Electrotechnical Commission) adopted the ANSI C standard, with only very minor changes, as an international standard, formally known as ISO/IEC 9899:1990. ANSI then officially adopted the international standard as a replacement for ANS X3.159-1989.

After ANSI adopted the ISO standard, some people, especially those who followed the standards process closely, switched from using the term "ANSI C" to Standard C, but the "ANSI C" had become so familiar that most people just kept using it. Even though the original ANSI C standard was officially obsolete a few months after its introduction, the nickname "ANSI C" has stuck even to today, especially in marketing materials.

Three updates to the standard were published in the mid-1990's. Here are brief descriptions quoted from the standard comittee's official website (the Technical Corrigenda contain only corrections and clarifications):

  • An amendment (ISO/IEC 9899 AM1) to the C standard was approved in 1995, covering invariant ISO 646 and multibyte support extentions.
  • Technical Corrigendum 1 (ISO/IEC 9899 TCOR1) was approved in 1995.
  • Technical Corrigendum 2 (ISO/IEC 9899 TCOR2) was published in 1996.

A revised version of the standard was published in 1999. It is officially ISO/IEC 9899:1999, but is more often referred to as C99. While it was being worked on, it was often referred to as C9x because people weren't sure which year it would be finished and officially adopted.

C89 and C90 are used interchangeably to refer any Standard C prior to C99.

Keil C compilers are based on C90. We added some language extensions as practical concessions to the architectural peculiarities of the microcontrollers we support and the needs of embedded systems programmers.



The following Discussion Forum threads may provide information related to this topic.

Last Reviewed: Wednesday, July 22, 2020

Did this article provide the answer you needed?
Not Sure
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.