# History of C

From cppreference.com
< c‎ | language

## Early C

- 1969: B created, based on BCPL, to replace PDP-7 assembler as the system programming language for Unix

  - added operators ++, --, compound assignment, remained a typeless language like BCPL

- 1971: NB ("new B") created when porting B to PDP-11

  - types (int, char, arrays and pointers), array-to-pointer conversion, compilation to machine code

- 1972: Language renamed to C

  - structs, operators && and ||, preprocessor, portable I/O

- 1973: Unix re-written in C

  - unsigned, long, unions, enumerations, increased type safety

- 1978: The C Programming Language, 1st edition

## Standard C

- 1983: ANSI established X3J11 committee
- 1988: The C Programming Language, 2nd edition
- 1989: `C89`, the ANSI C standard published

1. codified existing practices
2. new features: volatile, enum, signed, void, locales
3. From C++: const, function prototypes

- 1990: `C90`, the ANSI C standard accepted as ISO/IEC 9899-1990
- 1995: `C95` (ISO/IEC 9899 AM1) (online store)

1. greatly expanded wide and multibyte character support (wctype.h, wchar.h, additions and changes to stream I/O, etc)
2. digraphs, iso646.h,

- 1995: Technical corrigendum 1 (ISO/IEC 9899 TCOR1)

  - 44 small changes

- 1996: Technical corrigendum 2 (ISO/IEC 9899 TCOR2)

  - 24 small changes

- 1999: `C99` (ISO/IEC 9899:1999)

1. new features: bool, long long, stdint.h, inttypes.h, restrict, compound literals, variable length arrays, flexible array members, designated initializers, fenv.h, variadic macros, complex numbers, __func__, hexadecimal floating point format (%a), monetary formatting in lconv, isblank, concatenation of narrow and wide string literals, trailing comma in enumerations, empty arguments in function-like macros, STDC_* pragmas, va_copy, null return of tmpnam, null pointer in setvbuf, hh and ll lengthspecifiers in printf, snprintf, _Exit, tgmath.h, POSIX-like strftime specifiers
2. from C++: inline, mix declarations and code, declarations in the init clause of the for loop, `//` comments, universal character names in source code
3. removed implicit functions and implicit int

- 2001: Technical corrigendum 1 (ISO/IEC 9899:1999/Cor.1:2001(E))

  - 11 defects fixed

- 2004: Technical corrigendum 2 (ISO/IEC 9899:1999/Cor.2:2004(E))
- 2004: Unicode TR (ISO/IEC TR 19769:2004) (ISO store) (November 7, 2003 draft)
- 2007: Technical corrigendum 3 (ISO/IEC 9899:1999/Cor.3:2007(E)) (September 7, 2007 draft)

  - deprecated gets

- 2007: Bounds-checking interfaces TR (ISO/IEC TR 24731-1:2007) (ISO store) (March 28, 2007 draft)
- 2008: Embedded TR (ISO/IEC TR 18037:2008) (ISO store) (September 24, 2003 draft)
- 2009: Decimal floating-point TR (ISO/IEC TR 24732:2009) (ISO store) (July 5, 2007 draft)
- 2009: Mathematical special functions TR (ISO/IEC TR 24747:2009) (ISO store) (August 2, 2006 draft)
- 2010: Dynamic allocations functions TR (ISO/IEC TR 24731-2:2010) (ISO store) (August 15, 2007 draft)
- 2011: `C11` (ISO/IEC 9899:2011) (ISO store) (ANSI store) (April 12, 2011 draft)

1. thread-aware memory model, stdatomic.h, threads.h, type-generic functions, alignas/alignof, noreturn, static assert, analyzability extensions, extensions to complex and imaginary types, anonymous structures and unions, exclusive file open mode. quick_exit
2. removed gets
3. from Bounds-checking interfaces TR: bounds-checking interfaces,
4. from Unicode TR: char16_t, char32_t, and uchar.h

- 2012: Technical corrigendum 1 (ISO/IEC 9899:2011/Cor 1:2012) (ISO store)

  - Fixes DR 411

- 2013: Secure Coding Rules TS (ISO/IEC TS 17961:2013) (ISO store) (June 26, 2012)
- 2014: FP TS part 1: Binary floating-point arithmetic (ISO/IEC TS 18661-1:2014) (ISO store) (2013 draft )

1. provides changes to C11 (mostly to Annex F) that cover all basic requirements and some recommendations of IEC 60559:2011 (C11 was built on IEC 60559:1989)

- 2015: FP TS part 2: Decimal floating-point arithmetic (ISO/IEC TS 18661-2:2015) (ISO store) (2015 draft)

1. provides changes to C11 to support all the requirements, plus some basic recommendations, of IEC 60559:2011 for decimal floating-point arithmetic. This supersedes ISO/IEC TR 24732:2009.

- 2015: FP TS part 3: Interchange and extended types (ISO/IEC TS 18661-3:2015) (ISO store) (2015 draft)

1. provides changes to C11 to support the recommendations of IEC 60559:2011 for extended floating‐point formats and the interchange formats, both arithmetic and non-arithmetic.

- 2015: FP TS part 4: Supplementary functions (ISO/IEC TS 18661-4:2015) (ISO store) (2015 draft)

1. provides changes to C11 to support all mathematical operations recommended by IEC 60559:2011, including trigonometry in π units, inverse square root, compounded interest, etc.

- 2016: FP TS part 5: Supplementary attributes (ISO/IEC TS 18661-5:2016) (ISO store)(2016 draft)

1. provides changes to C11 to support all supplementary attributes (evaluation model, exception handling, reproducibility, etc) recommended by IEC 60559:2011

- 2018: `C17` (ISO/IEC 9899:2018) (ISO Store) (Final draft)

  Includes the deprecation of `ATOMIC_VAR_INIT` and the fixes to the following defect reports:

Defect Reports fixed in C17 (54 defects)

- DR 400
- DR 401
- DR 402
- DR 403
- DR 404
- DR 405
- DR 406
- DR 407
- DR 410
- DR 412
- DR 414
- DR 415
- DR 416
- DR 417
- DR 419
- DR 423
- DR 426
- DR 428
- DR 429
- DR 430
- DR 431
- DR 433
- DR 434
- DR 436
- DR 437
- DR 438
- DR 439
- DR 441
- DR 444
- DR 445
- DR 447
- DR 448
- DR 450
- DR 452
- DR 453
- DR 457
- DR 458
- DR 459
- DR 460
- DR 462
- DR 464
- DR 465
- DR 468
- DR 470
- DR 471
- DR 472
- DR 473
- DR 475
- DR 477
- DR 480
- DR 481
- DR 485
- DR 487
- DR 491

### Future development

- Parallelism TS (Draft n2017 2016-03-10)
- Transactional Memory TS (Draft n1961 2015-09-23)
- `C2x` (Draft n2347 2019-03-13)) Next major C language standard revision

  - List of issues that were not granted DR status: n2297 (2018-09-24)
  - List of post-C11 defect reports (including those scheduled for C2x) n2316 (October 2018)

### See also

### References

- The Development of the C Language by Dennis M. Ritchie
- Rationale for the C99 standard

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/language/history&oldid=109973"