Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
C(7)		   FreeBSD Miscellaneous Information Manual		  C(7)

     c,	c78, c89, c90, c99 -- The C programming	language

     C is a general purpose programming	language, which	has a strong connec-
     tion with the UNIX	operating system and its derivatives, since the	vast
     majority of those systems were written in the C language.	The C language
     contains some basic ideas from the	BCPL language through the B language
     written by	Ken Thompson in	1970 for the DEC PDP-7 machines.  The develop-
     ment of the UNIX operating	system was started on a	PDP-7 machine in as-
     sembly language, but it made very difficult to port the existing code to
     other systems.

     In	1972 Dennis M. Ritchie worked out the C	programming language for fur-
     ther development of the UNIX operating system.  The idea was to implement
     only the C	compiler for different platforms, and implement	most part of
     the operating system in the new programming language to simplify the
     portability between different architectures.  It follows that C is	very
     eligible for (but not limited to) writing operating systems and low-level

     The C language did	not have a specification or standardized version for a
     long time.	 It went through a lot of changes and improvements for ages.
     In	1978, Brian W. Kernighan and Dennis M. Ritchie published the first
     book about	C under	the title "The C Programming Language".	 We can	think
     of	this book as the first specification of	the language.  This version is
     often referred as K&R C after the names of	the authors.  Sometimes	it is
     referred as C78, as well, after the publishing year of the	first edition
     of	the book.

     It	is important to	notice,	that the instruction set of the	language is
     limited to	the most fundamental elements for simplicity.  Handling	of the
     standard I/O and such common functions are	implemented in the libraries
     shipped with the compiler.	 As these functions are	also widely used, it
     was demanded to include into the description what requisites the library
     should conform to,	not just strictly the language itself.	Accordingly,
     the aforementioned	standards cover	the library elements, as well.	The
     elements of this standard library is still	not enough for more compli-
     cated tasks.  In this case	the provided system calls of the given operat-
     ing system	can be used.  To not lose the portability by using these sys-
     tem calls,	the POSIX (Portable Operating System Interface)	standard
     evolved.  It describes what functions should be available to keep porta-
     bility.  Note, that POSIX is not a	C standard, but	an operating system
     standard and thus is beyond the scope of this manual.  The	standards dis-
     cussed below are all C standards and only cover the C programming lan-
     guage and the accompanying	library.

     After the publication of the book mentioned before, the American National
     Standards Institute (ANSI)	started	to work	on standardizing the language,
     and they announced	ANSI X3.159-1989 in 1989.  It is usually referred as
     ANSI C or C89.  The main difference in this standard were the function
     prototypes, which is a new	way of declaring functions.  With the old-
     style function declarations, the compiler was unable to check the sanity
     of	the actual parameters at a function call.  The old syntax was highly
     error-prone because incompatible parameters were hard to detect in	the
     program code and the problem only showed up at run-time.

     In	1990, the International	Organization for Standardization (ISO) adopted
     the ANSI standard as ISO/IEC 9899:1990 in 1990.  This is also referred as
     ISO C or C90.  It only contains negligible	minor modifications against
     ANSI C, so	the two	standards often	considered to be fully equivalent.
     This was a	very important milestone in the	history	of the C language, but
     the development of	the language did not stop.

     The ISO C standard	was later extended with	an amendment as	ISO/IEC	9899
     AM1 in 1995.  This	contained, for example,	the wide-character support in
     wchar.h and wctype.h.  Two	corrigenda were	also published:	Technical Cor-
     rigendum 1	as ISO/IEC 9899	TCOR1 in 1995 and Technical Corrigendum	2 as
     ISO/IEC 9899 TCOR1	in 1996.  The continuous development and growth	made
     it	necessary to work out a	new standard, which contains the new features
     and fixes the known defects and deficiencies of the language.  As a re-
     sult, ISO/IEC 9899:1999 was born in 1999.	Similarly to the other stan-
     dards, this is referred after the publication year	as C99.	 The improve-
     ments include the following:

	   +o   Inline functions

	   +o   Support for variable length arrays

	   +o   New high-precision integer type named long long int, and	other
	       integer types defined in	stdint.h

	   +o   New boolean data	type implemented in stdbool.h

	   +o   One line	comments taken from the	C++ language

	   +o   Some new	preprocessor features

	   +o   New variables can be declared anywhere, not just	in the begin-
	       ning of the program or program blocks

	   +o   No implicit int type

     Since then	new standards have not been published, but the C language is
     still evolving.  New and useful features have been	showed up in the most
     famous C compiler:	GNU C.	Most of	the UNIX-like operating	systems	use
     GNU C as a	system compiler, but those addition in GNU C should not	be
     considered	as standard features.

     c89(1), c99(1), cc(1)

     ANSI, X3.159-1989.

     ISO/IEC, 9899:1990, Programming languages -- C.

     ISO/IEC, 9899 AM1.

     ISO/IEC, 9899 TCOR1, Programming languages	-- C, Technical	Corrigendum 1.

     ISO/IEC, 9899 TCOR2, Programming languages	-- C, Technical	Corrigendum 2.

     ISO/IEC, 9899:1999, Programming languages -- C.

     This manual page first appeared in	FreeBSD	9.0.

     This manual page was originally written by	Gabor Kovesdan

FreeBSD	13.0			 May 30, 2011			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help