From Seo Wiki - Search Engine Optimization and Programming Languages
C99 is a modern dialect of the C programming language. It extends the previous version (C89) to better make use of available computer hardware and to better employ the latest advances in compiler technology.
Some extensions provide more convenient ways of expressing particular algorithm constructs. Others provide better control, for instance for numerical purposes, or for directing optimizations.
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.
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 display a warning while compiling, assume
int and continue translating the program.
C99 introduced several new features, many of which had already been implemented as extensions in several compilers:
- inline functions
- intermingled declarations and code, variable declaration no longer restricted to file scope or the start of a compound statement (block)
- several new data types, including
long long int, optional extended integer types, an explicit boolean data type, and a
complextype to represent complex numbers
- variable-length arrays
- support for one-line comments beginning with
//, as in BCPL or C++
- new library functions, such as
- new header files, such as
- type-generic math functions (
- 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
- universal character names, which allows user variables to contain other characters than the standard character set
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. Variable-length arrays are not among them.
The compiler within Pelles C support most C99 features.
Intel C++ compiler supports some of most of the important C99 features.
The Tiny C Compiler supports most of C99 except complex numbers and variable length arrays.
The Portable C compiler is also working to become C99 compliant.
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
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.
- ↑ "Status of C99 features in GCC". Free Software Foundation, Inc.. 2009-03-29. http://gcc.gnu.org/c99status.html. Retrieved 2009-07-04.
- ↑ "C99 compliance in Open Watcom". http://www.openwatcom.org/index.php/C99_Compliance. Retrieved 2009-03-11.
- ↑ "Sun Studio 12: C Compiler 5.9 Readme". Sun Microsystems, Inc.. 2007-05-31. http://developers.sun.com/sunstudio/documentation/ss12/mr/READMEs/c.html#about. Retrieved 2008-01-09.
- ↑ "C/C++ interpreter Ch C99 features". SoftIntegration, Inc.. 2008-02-15. http://www.softintegration.com/demos/chstandard/c99.html. Retrieved 2008-02-15.
- ↑ "x86 Open64". Developer.amd.com. 1989-04-01. http://developer.amd.com/cpu/open64/onlinehelp/pages/x86_open64_help.htm#Standards. Retrieved 2009-06-08.
- ↑ "Clang Compiler User's Manual". http://clang.llvm.org/docs/UsersManual.html#c. Retrieved 2010-01-11.
- ↑ "Remove
gets()". Registered document of ISO/IEC JTC1/SC22/WG14. 2009-10-29. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1420.htm. ; adopted by the committee as stated in "draft minutes of the October 2009 meeting". http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1422.pdf. , item 4.17.
- PDF (3.61 MB)
- New in C9X
- IBM developerWorks: Open source development using C99
- Kuro5hin: Are you Ready For C99?bg:C (език за програмиране)#C99