#include directive
源文件包含
将其他源文件包含到当前源文件中,该源文件位于指令之后的行中。
句法
#include | (1) | |
---|---|---|
#include "filename" | (2) | |
__has_include ( " filename " )__has_include ( < filename > ) | (3) | (since C++17) |
任何预处理令牌%28宏常量或表达式%29允许作为参数#include和__has_include%28自C++17%29以来,只要它们扩展为由<>或""...
解释
1,2%29包含源文件,由文件名标识为当前源文件,该源文件位于指令之后的行中。如果找不到文件,则程序格式不正确.
1%29以实现定义的方式搜索文件。此语法的目的是搜索在实现控制下的文件。典型的实现只搜索标准目录。标准C++库和标准C库隐式地包含在这些标准包含目录中。标准的包含目录通常可以由用户通过编译器选项来控制。
2%29以实现定义的方式搜索文件。此语法的目的是搜索不受实现控制的文件。典型的实现首先搜索当前文件所在的目录,只有在找不到该文件时,才搜索标准包含目录,如%281%29所示。
3%29预处理器常量表达式,其计算值为1
如果找到文件名,并且0
如果不是。如果该参数将不是一个有效的参数,则该程序的格式是错误的。#include
指令。
注记
当包含文件时,它将由翻译阶段1-4,它可以递归地包括嵌套的展开。#include
指令。为了避免重复包含同一文件和在文件包含自身时(可能是临时的)进行没完没了的递归,头护罩
是常用的:整个标头被包装在里面。
二次
#ifndef FOO_H_INCLUDED /* any name uniquely mapped to file name */
#define FOO_H_INCLUDED
// contents of the file are here
#endif
二次
许多编译器也实现了非标准的。pragma
#pragma once
具有类似的效果:如果文件%28(其中文件标识是以操作系统特定的方式确定的)已经包含在其中,它将禁用文件的处理。
例
二次
#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 | a list of C++ Standard Library header files |
---|
C源文件包含文档
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。