The C language was originally developed in 1972 by Brian Kerninghan and Dennis Ritchie of AT&T. C is a general-purpose programming language that features economy of expression, modern control flow and data structures, and a rich set of operators. Because it is not a very high-level language, C is good for low-level systems-oriented programming such as writing operating systems or compilers. It is also used as the output of front-ends of compilers for more high-level languages. On the other hand, C's lack of restrictions and its generality can make it more convenient and effective for tasks than supposedly more powerful languages. This is of course a double-edged sword. While C's flexibility provides convenience for experienced programmers, it also provides very fertile ground for the introduction of errors and bugs by programmers less familiar with the language. Mastering the use of pointers in C, for instance, is one of the most difficult tasks to accomplish for programmers experienced only in non-pointer based languages like FORTRAN. C's flexibility, therefore, increases the importance of having well-defined style guides and programming standards in place.
The first version of C was developed for the Unix operating system running on the DEC PDP-11 computer. Today, C compilers are available for nearly all operating systems and hardware platforms, ranging from PCs to Unix systems to mainframes. For many years after its introduction, the most formal definition of the language was contained in the reference manual, The C Programming Language. The formal definition of the C language is now contained in the ANSI C standard, first published in 1988.
The predecessors of C, BCPL and B, were typeless languages. By contrast, C provides a variety of data types including characters , integers, floating point numbers , pointers, arrays, structures, and unions. C clearly shows its history, however, in that it is not strongly typed like languages such as Java or Ada. C provides the basic control-flow statements required to implement structured programming, including "if" statements, switch statements, while, for, and do loops , and early loop exits (break statements). The ANSI C standard also added the definition of a standard C library. This library specifies functions for file input and output, memory allocation, string manipulation, and other common functions. Many of these functions, while formalized in the standard, existed in earlier implementations .