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
1
if the file name is found and 0
if not. The program is ill-formed if the argument would not be a valid argument to the #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 |
Please login to continue.