C99 Alignment Report

Document Number: AUSTIN/43

Title: c99 Alignment Report

Revision Date: 2000-04-18

Source: Andrew Josey, Chair

Action: for Review

Date: Tue Apr 18 20:47:43 BST 2000

The report comprises of this introductory page, and two additional files:

  1. xbdd3_c99_alignment.txt. This file contains aardvark for alignment of XBD D3 with C99 (35 change requests in total). These refer to Header changes, including the specification of 5 brand new headers (<complex.h> <fenv.h> <stdbool.h> <stdint.h> and <tgmath.h>
  2. xshd3_c99_alignment.txt. Contains the aardvark for alignment of XSH D3 with C99 (339 change requests in total). This includes 76 new entrys, covering 209 new interface functions. The remaining change requests identify detailed changes to existing interfaces.
These two files are also available as a GZIPed TAR archive.


C99 adds a lot of new interfaces. In addition it defines about a dozen functions not previously defined in the C Standard but included in the Single UNIX Specification. The XSI marking for these needs to be removed.

In the main, C99 defines new functionality not previously defined in any of the standards. There are also a number of [minor] clarifications to existing function definitions. These seem harmless enough, but they will need to be checked carefully to ensure they do not invalidate existing implementations.

Detailed comments are included in the aardvark as editorial notes. The following general points should also be noted:

  1. Math Functions

    As well as extending the math functions in <math.h>, C99 adds new math functions/macros in <complex.h>, <fenv.h> and <tgmath.h>.

    This is the major source of concern with regards to SUS alignment.

    The Single UNIX Specification has always tried to be more explicit about error handling; for example, by defining how input values containing NaN or Inf are handled. A further set of proposed additional XSI error returns may be submitted shortly to address this.

  2. The "restrict" type-qualifer.

    The XSH function prototypes have been made consistent with those defined in C99, including the use of the "restrict" type-qualifer. However, this keyword has not been applied to other, non-C99 interfaces. The working group will need to decide whether or not this needs to be done.


    Rationales from C99 have been added to the RATIONALE section of appropriate man pages. These may not be appropriate for release, but it seemed prudent to include them at least for a first review.


    These have been added to brand new entrys, but not to changed pages.


    Major changes in margin marks have been indicated (esp. use of XSI and CX), but many of these are subtle and there has been no chance to check through Draft 3 as a whole. Hopefully, changes should be apparent from the contents of the change requests, but someone should check through these carefully in the next draft.

  6. PRAGMAs.

    A number of C99 headers (e.g., <complex.h> and <fenv.h> describe pragmas as an aid to application portability. We have included a description of these in the appropriate APPLICATION USAGE sections, but the working group may want to consider adding SUS-like feature test macros as well. Also, the working group need to decide if this text would be better positioned in a normative section (e.g., the DESCRIPTION).

  7. The C89 utility

    It is recommended that c89 be made obsolete and a new c99 utility be introduced. An additional aardvark will be submitted shortly to address these changes in detail.