在紧跟这条指令后面的行中将其他源文件包含到当前源文件之中。
目录 |
#include < 文件名>
|
(1) | ||||||||
#include " 文件名"
|
(2) | ||||||||
__has_include ( " 文件名 " ) __has_include ( < 文件名 > )
|
(3) | (C++17 起) | |||||||
任何预处理记号(宏常量或者表达式)都允许用作 #include
和 __has_include
(C++17 起)的实参,只要它们扩展为以 <
>
或者 "
"
所包围的字符序列即可。
#include
指令不是有效的实参,则程序非良构。当包含一个文件时,将进行翻译阶段 1 到 4 的处理,其中将递归地包括对其中嵌套的 #include
指令的扩展。为了避免相同文件被重复包含,和当文件(可能传递性地)包含自身时的无限递归,通常会使用头文件防护:整个头文件被包含到:
#ifndef FOO_H_INCLUDED /* 任何可唯一对应到文件名的名字 */ #define FOO_H_INCLUDED // 这里是文件的内容 #endif
许多编译器也实现了非标准的 pragma #pragma once 并具有相似的效果:当同一个文件(文件的识别是以特定于操作系统的方式所确定的)已经被包含过时,它将关闭对该文件的处理。
#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
输出:
Hello, world! Hello again!
cpp/header | C++ 标准库头文件的列表 |
源文件包含的 C 文档
|