Source file inclusion
Includes other source file into current source file at the line immediately after the directive.
Syntax
#include < filename>
|
(1) | ||||||||
#include " filename"
|
(2) | ||||||||
__has_include ( " filename " ) __has_include ( < filename > )
|
(3) | (since C++17) | |||||||
Any preprocessing tokens (macro constants or expressions) are permitted as arguments to #include
and __has_include
(since C++17) as long as they expand to a sequence of characters surrounded by <
>
or "
"
.
Explanation
#include
directive.Notes
When a file is included, it is processed by translation phases 1-4, which may include, recursively, expansion of the nested #include
directives. To avoid repeated inclusion of the same file and endless recursion when a file includes itself, perhaps transitively, header guards are commonly used: the entire header is wrapped in
#ifndef FOO_H_INCLUDED /* any name uniquely mapped to file name */ #define FOO_H_INCLUDED // contents of the file are here #endif
Many compilers also implement the non-standard pragma #pragma once with similar effects: it disables processing of a file if the same file (where file identity is determined in OS-specific way) has already been included.
Example
#if __has_include(<optional>) # include <optional> # define have_optional 1 #elif __has_include(<experimental/optional>) # include <experimental/optional> # define have_optional 1 # define experimental_optional 1 #else # define have_optional 0 #endif #ifndef TEXT #include <iostream> int main() { #define TEXT "Hello, world!" #include __FILE__ #define TEXT "Hello again!" #include __FILE__ } #else std::cout << TEXT << '\n'; #undef TEXT #endif
Output:
Hello, world! Hello again!
See also
cpp/header | a list of C++ Standard Library header files |
C documentation for Source file inclusion
|