C Language | Computer System Development | The C Programming Language
This article introduces the characteristics of C, its standards, and the relationship between high-level languages and machine code.
The C Programming Language
C was created in 1972. It provides low-level control while remaining a high-level language, so it has been widely used for operating systems, embedded devices, games, and other performance-sensitive software.
C++ extends C with additional language features, including support for object-oriented programming. Learning C also helps when studying many languages influenced by its syntax and programming model.
International Standards
A compiler translates C source code into a form that a machine can execute. Standardized syntax makes it possible to write portable programs instead of depending on one compiler’s dialect.
Important milestones include:
| Year | Standard |
|---|---|
| 1972 | C was created before standardization |
| 1989 | ANSI X3.159-1989, commonly called C89 |
| 1990 | ISO/IEC 9899:1990, commonly called C90 |
| 1999 | ISO/IEC 9899:1999, commonly called C99 |
| 2011 | ISO/IEC 9899:2011, commonly called C11 |
| 2018 | ISO/IEC 9899:2018, commonly called C17 |
Before standardization, The C Programming Language by Brian Kernighan and Dennis Ritchie served as an important reference. It is commonly called K&R after the authors’ initials.

Compiler support for standard versions and extensions varies. Portable programs should confirm the standards supported by their target toolchains.
Machine Code and High-Level Languages
A CPU directly executes machine code. Assembly language represents machine instructions with readable symbols, but programming entirely in machine code or assembly is costly and difficult to maintain.
High-level languages are designed to be easier for people to read and write. C source code is compiled into object code before execution. This produces efficient programs, but compiled executables generally depend on the target system.
Interpreted languages instead read and execute source instructions through an interpreter. They can support interactive development but add runtime interpretation work.
C remains useful for understanding how software interacts with computer systems and for building efficient programs close to the hardware.