Release 3.3 Copyright ©1995 by NeXT Computer, Inc.  All Rights Reserved.

3.3 Release Notes:
Precompiled Headers

This file contains release notes for the 3.1, and 3.0 releases of Precompiled Headers. Items specific to the 3.1 release are listed first, and the Release 3.0 notes follow.  There are no items specific to the 3.3 or 3.2 releases.

A precompiled header is a C or Objective C header file that has been preprocessed and parsed, thereby improving compile time and reducing symbol table size.  The macros and external declarations from the original header are sorted to enable fast lookup. Precompiled headers reduce the amount of information processed and output by the compiler.  They can also serve to reduce link times and executable size when symbol table information is kept. A new implementation of the C preprocessor (cpp) can use precompiled headers in place of standard headers.

In most cases, the use of precompiled headers is transparent.  Precompiled headers are simple enough to use that most projects require no conversion at all, or can be converted in a day or less.

Notes Specific to Release 3.1

Fat Precompiled Headers

Due to the additional capability of a precompiled header to support multiple architectures in Release 3.1, precompiled headers built using Release 3.0 will not be usable under 3.1. To re-generate your precompiled headers, usually a `make clean all' will suffice (for more details, see Creating Your Own Precompiled Headers below).

When precompiling with multiple -arch flags in a multiple architecture environment, precompiled headers will be generated "fat".  This makes them usable by builds running on more than one architecture.  The precompiled system headers on the 3.1 CD-ROM will be shipped "fat."

For more details on multiple- and cross-architecture compilation, see the Compiler and CompilerTools release notes.

Known Problems

Reference: 31148
Problem: The index() macro in string.h can cause precompiled headers not to be used.
Description: Include file dependencies occasionally cause conflicts with the current precompiled header format, causing the precompiled header not to be used. This will slow down compilation, but won't cause any errors.
Workaround: Make sure the #include or #import lines for precompiled headers precede all others wherever possible.

Notes Specific to Release 3.0

Using Precompiled System Headers

The precompiled version of a header file has a ".p" extension, rather than the standard ".h" extension.  You should not refer to appkit.p in your source files; just use appkit.h and the cpp-precomp preprocessor will use the precompiled form if it's available and appropriate.

When the preprocessor encounters an include directive, it automatically looks for a precompiled version of the header.  If one is found, it checks whether the context is equivalent to the context in which the precompiled header was built;