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
#endifOutput:
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.