Source file inclusion
Includes other source file into current source file at the line immediately after the directive.
Contents |
[edit] 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 " ".
[edit] Explanation
#include directive.[edit] 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.
[edit] 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!
[edit] See also
| cpp/header | a list of C++ Standard Library header files |
| C documentation for Source file inclusion
| |