f78
The #include Directive
Contents|Index|Previous|Next
The
#include directive
Both
user and system header files are included using the preprocessing directive,
#include.
It has the following 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 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 elseis checked for macro calls, which are expanded
(see Macros).
When this is done, the result must fit one of the previous 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.
0