This MedLibrary.org supplementary page on C99 is provided directly from the open source Wikipedia as a service to our readers. Please see the note below on authorship of this content, as well as the Wikipedia usage guidelines. To search for other content from our encyclopedia supplement, please use the form below:
Related Sponsors
| This article's introduction section may not adequately summarize its contents. To comply with Wikipedia's lead section guidelines, please consider expanding the lead to provide an accessible overview of the article's key points. |
C99 is a modern dialect of the C programming language.
Contents |
History
After the ANSI standardization process, the C language specification remained relatively static for some time, whereas C++ continued to evolve, largely during its own standardization effort. Normative Amendment 1 created a new standard for the C language in 1995, but only to correct some details of the C89 standard and to add more extensive support for international character sets. However, the standard underwent further revision in the late 1990s, leading to the publication of ISO/IEC 9899:1999 in 1999. This standard is commonly referred to as "C99." It was adopted as an ANSI standard in May 2000. The international C standard is maintained by the working group ISO/IEC JTC1/SC22/WG14.
New features
C99 introduced several new features, many of which had already been implemented as extensions in several compilers:
- inline functions
- variable declaration no longer restricted to file scope or the start of a compound statement
- several new data types, including
long long int, optional extended integer types, an explicit boolean data type, and acomplextype to represent complex numbers - variable-length arrays
- support for one-line comments beginning with
//, as in BCPL or C++ - new library functions, such as
snprintf - new header files, such as
stdbool.handinttypes.h - type-generic math functions (
tgmath.h) - improved support for IEEE floating point
- designated initializers
- compound literals
- support for variadic macros (macros of variable arity)
restrictqualification to allow more aggressive code optimization
Backward compatibility with C90
C99 is for the most part backward compatible with C90, but is stricter in some ways; in particular, a declaration that lacks a type specifier no longer has int implicitly assumed. The C standards committee decided that it was of more value for compilers to diagnose inadvertent omission of the type specifier than to silently process legacy code that relied on implicit int. In practice, compilers are likely to diagnose the omission but also assume int and continue translating the program.
Compatibility with C++
Parts of the C99 standard are included in the proposed extensions to the C++ language known as TR1 and C++0x, including integer types, header files and library functions.
Support by major compilers
GCC and other C compilers now support many of the new features of C99. However, there has been less support from vendors such as Microsoft and Borland that have mainly focused on C++, since C++ provides similar functionality improvement.
GCC, despite its extensive C99 support, is still not a completely compliant implementation (41 features done); as of November 2008, 9 of features are missing or do not work correctly.1
According to Sun Microsystems, Sun Studio (which is downloadable without charge) now supports the full C99 standard.2
The C interpreter Ch supports major C99 features 3 and it is available without charge in Windows, Linux, Mac OS X, Solaris, QNX and FreeBSD.
Version detection
A standard macro __STDC_VERSION__ is defined with value 199901L to indicate that C99 support is available. As with the __STDC__ macro for C90, __STDC_VERSION__ can be used to write code that will compile differently for C90 and C99 compilers, as in this example that ensures that inline is available in either case.
#if __STDC_VERSION__ >= 199901L /* "inline" is a keyword */ #else # define inline /* nothing */ #endif
Future standards directions
Since ratification of the 1999 C standard, the standards working group has prepared technical reports specifying improved support for embedded processing, additional character data types (Unicode support), and library functions with improved bounds checking. Work continues on technical reports addressing decimal floating point, additional mathematical special functions, and additional dynamic memory allocation functions. The C and C++ standards committees have been collaborating on specifications for threaded programming.
As of 2007, work has begun in anticipation of another revision of the C standard, informally called "C1x". The C standards committee has adopted guidelines that should limit the adoption of new features that have not been tested by existing implementations.
It is likely that the standard gets function, which was officially deprecated in response to a defect report concerning its unsafe interface design, will not be specified in the next revision of the C standard.
See also
References
- ^ "Status of C99 features in GCC". Free Software Foundation, Inc. (2007-11-22). Retrieved on 2008-01-09.
- ^ "Sun Studio 12: C Compiler 5.9 Readme". Sun Microsystems, Inc. (2007-05-31). Retrieved on 2008-01-09.
- ^ "C/C++ interpreter Ch C99 features". SoftIntegration, Inc. (2008-02-15). Retrieved on 2008-02-15.
External links
- Draft of the C99 standard with corrigenda TC1, TC2, and TC3 includedPDF (3.61 MB)
- IBM developerWorks: Open source development using C99
- Kuro5hin: Are you Ready For C99?
Wikipedia content modification information:
- This page was last modified on 25 December 2008, at 15:15.
Wikipedia Authorship and Review
Wikipedia content provided here is not reviewed directly by MedLibrary.org. Wikipedia content is authored by an open community of volunteers and is not produced by or in any way affiliated with MedLibrary.org.
Wikipedia Usage Guidelines
This article is licensed under the GNU Free Documentation License. It uses material from the Wikipedia article on "C99".
The URL for this specific entry is:
All Wikipedia text is available under the terms of the GNU Free Documentation License. (See Copyrights for details). Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc.
