6.10.2 Source file inclusion

Previous Table of Contents "New C Standard" commentary

1896 A #include directive shall identify a header or source file that can be processed by the implementation.

1897 A preprocessing directive of the form

  # include <h-char-sequence> new-line

searches a sequence of implementation-defined places for a header identified uniquely by the specified sequence between the < and > delimiters, and causes the replacement of that directive by the entire contents of the header.

1898 How the places are specified or the header identified is implementation-defined.

1899 A preprocessing directive of the form

  # include "q-char-sequence" new-line

causes the replacement of that directive by the entire contents of the source file identified by the specified sequence between the " delimiters.

1900 The named source file is searched for in an implementation-defined manner.

1901 If this search is not supported, or if the search fails, the directive is reprocessed as if it read

  # include <h-char-sequence> new-line

with the identical contained sequence (including > characters, if any) from the original directive.

1902 144) As indicated by the syntax, a preprocessing token shall not follow a #else or #endif directive before the terminating new-line character.

1903 However, comments may appear anywhere in a source file, including within a preprocessing directive.

1904 A preprocessing directive of the form

  # include pp-tokens new-line

(that does not match one of the two previous forms) is permitted.

1905 The preprocessing tokens after include in the directive are processed just as in normal text. (Each identifier currently defined as a macro name is replaced by its replacement list of preprocessing tokens.)

1906 (Each identifier currently defined as a macro name is replaced by its replacement list of preprocessing tokens.)

1907 The directive resulting after all replacements shall match one of the two previous forms.145)

1908 The method by which a sequence of preprocessing tokens between a < and a > preprocessing token pair or a pair of " characters is combined into a single header name preprocessing token is implementation-defined.

1909 The implementation shall provide unique mappings for sequences consisting of one or more letters or digits (as defined in 5.2.1) nondigits or digits (6.4.2.1) followed by a period (.) and a single letter nondigit.

1910 The first character shall be a letter not be a digit.

1911 The implementation may ignore the distinctions of alphabetical case and restrict the mapping to eight significant characters before the period.

1912 A #include preprocessing directive may appear in a source file that has been read because of a #include directive in another file, up to an implementation-defined nesting limit (see 5.2.4.1).

1913 EXAMPLE 1 The most common uses of #include preprocessing directives are as in the following:


        #include 
        #include "myprog.h"

1914 EXAMPLE 2 This illustrates macro-replaced #include directives:


        #if VERSION == 1
                #define INCFILE  "vers1.h"
        #elif VERSION == 2
                #define INCFILE  "vers2.h"   // and so on
        #else
                #define INCFILE  "versN.h"
        #endif
        #include INCFILE

1915 Forward references: macro replacement (6.10.3).

1916 145) Note that adjacent string literals are not concatenated into a single string literal (see the translation phases in 5.1.1.2);

1917 thus, an expansion that results in two string literals is an invalid directive.

Next

Created at: 2008-01-30 02:39:45 The text from WG14/N1256 is copyright © ISO