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.

First edition Second edition

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.