浅谈 C++的 #include

时间:2021-04-24 00:46:41

笑江湖,刀光剑影无数, 叹世人,痴迷一生不悟

浅谈 C++的 #include <iostream>


我们首先来看一下常见的 C++文件。

#include <iostream>

int main()
{
	std::cout << "Welcome to learn C++" << std::endl;
	std::cin.get();
}

在大学课程中,我们并没有考虑那么多,也很少(几乎没有)老师为我们解答 #include <iostream> 的真正意义。 通过运行,我们可以很清楚的知道,如果没有 #include <iostream> ,程序就会报错。

这本身无可厚非,因为当我们习惯于此之后,就会认为是理所当然,水到渠成的事。类比于苹果熟了就落下来,这本身是自然界的规律。知道即可,毕竟就算不知道这些,也不会耽误我们吃苹果。(PS:要不然哪还有Isaac Newton


进入正题,今天我们就来着重讲解一下 #include <iostream> 弥补一下大学时的缺憾。

浅谈 C++的 #include <iostream> 这条简单的语句可以分为以下几个部分:

  1. 符号 #
  2. 预处理指令 include
  3. 文件名 iostream
  4. 尖括号 <>

如果有不清楚的地方,可以略过(也可以先记住),在求学C++的路上总会看到这些“风景”

1. 符号#

在C++中,以 # 开头的被称为预处理(器)指令。或者说,所有的预处理(器)指令都是以 # 开头的。

需要注意的是:

  1. 只有空格可以出现在预处理(器)指令之前;
  2. 预处理(器)指令不是 C++的语句,所以不用以分号(;)结尾;

2. 预处理指令include

在真正讲解之前,我们首先要了解一下预处理(器)指令。 我们知道C++是C语言的超集,预处理其实就是C++从C语言里继承而来的一个功能。预处理(器)指令:指示编译器在实际编译之前所需完成的预处理。

include是最为常见的预处理指令,主要是作为文件的引用(通俗来讲,include 它需要找到一个文件,然后将该文件的所有内容拷贝到现在的程序内)。 为了便于大家理解,这里做一个Demo演示一下。

// new 一个头文件: endBrace.h. 这里仅仅忙一个大括号的一端。
 }
// new 一个cpp文件:Test.cpp

#include <iostream>

int sum(int a, int b)
{
   return a + b;
#include <endBrace.h> // 注意这里

然后通过运行命令:

g++ -c Test.cpp

顺利编译通过。

此时我们直白的理解了预处理(器)指令include的作用:

#include <文件名> 就是找到并打开该文件,然后将其中的内容复制并粘贴(copy & paste)到源程序里。 #include <文件名> 就是找到并打开该文件,然后将其中的内容复制并粘贴(copy & paste)到源程序里。 #include <文件名> 就是找到并打开该文件,然后将其中的内容复制并粘贴(copy & paste)到源程序里。

3. 文件名 iostream

了解C编程语言的同学都知道扩展名,但是这个文件为什么没有呢?惊不惊喜,意不意外,大学的时候咋就没注意呢? 浅谈 C++的 #include <iostream>

3.1 iostream为什么没有扩展名呢?

先说结论:网吧的屁股————规定 C++标准委员会那帮老头这么干主要是:

为了将 C++标准库C标准库进行区分。仅此而已。

3.2 iostream的作用

我们都知道它是标准输入/输出流。 这里给出个iostream的概要,相信大家都能看懂(看懂了别忘了评论区告诉我一下)

/*
    iostream synopsis

#include <ios>
#include <istream> // 输入流
#include <ostream> // 输出流
#include <streambuf> // buffer

namespace std {

extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;

}  

4. 尖括号<>

在实际开发中,我们还见过双引号("")的用法,那么尖括号<>和双引号("")的区别是什么呢?

区别:编译器搜索路径的不同 尖括号<> : 编译器从标准库路径开始搜索 双引号"" : 编译器从用户的工作目录开始搜索,找不到就继续在标准库路径进行搜索。

So,我们也可以写成下面的样子(不推荐),反之不成立:

//#include <iostream>

#include "iostream"

就这一句话,写了这么多。C++真是老当益壮,吾自老而弥坚。晚安!!!