Go to the first, previous, next, last section, table of contents.
Both user and system header files are included using the preprocessing
directive `#include'. It has three variants:
#include <file>
- This variant is used for system header files. It searches for a file
named file in a list of directories specified by you, then in a
standard list of system directories. You specify directories to
search for header files with the command option `-I'
(see section Invoking the C Preprocessor). The option `-nostdinc' inhibits searching
the standard system directories; in this case only the directories
you specify are searched.
The parsing of this form of `#include' is slightly special
because comments are not recognized within the `<...>'.
Thus, in `#include <x/*y>' the `/*' does not start a comment
and the directive specifies inclusion of a system header file named
`x/*y'. Of course, a header file with such a name is unlikely to
exist on Unix, where shell wildcard features would make it hard to
manipulate.
The argument file may not contain a `>' character. It may,
however, contain a `<' character.
#include "file"
- This variant is used for header files of your own program. It
searches for a file named file first in the current directory,
then in the same directories used for system header files. The
current directory is the directory of the current input file. It is
tried first because it is presumed to be the location of the files
that the current input file refers to. (If the `-I-' option is
used, the special treatment of the current directory is inhibited.)
The argument file may not contain `"' characters. If
backslashes occur within file, they are considered ordinary text
characters, not escape characters. None of the character escape
sequences appropriate to string constants in C are processed. Thus,
`#include "x\n\\y"' specifies a filename containing three
backslashes. It is not clear why this behavior is ever useful, but
the ANSI standard specifies it.
#include anything else
- This variant is called a computed #include. Any `#include'
directive whose argument does not fit the above two forms is a computed
include. The text anything else is checked for macro calls,
which are expanded (see section Macros). When this is done, the result
must fit one of the above two variants--in particular, the expanded
text must in the end be surrounded by either quotes or angle braces.
This feature allows you to define a macro which controls the file name
to be used at a later point in the program. One application of this is
to allow a site-specific configuration file for your program to specify
the names of the system include files to be used. This can help in
porting the program to various operating systems in which the necessary
system header files are found in different places.
Go to the first, previous, next, last section, table of contents.