和你一起编写自己的函数库!

一.前言

1.面向的读者对象:

已经有了C++基础并试图编(抄)写一个自己的函数库

2.编写的方法

以STL模板里的文件为基础+查书+查博客

3.讲述的顺序

按照文件中嵌套的顺序,由外入内

4.参考资料的用法

!!!编写的过程中一定记得常保存!!!

4.1 STL文件
  1. 标准库文件 是主要线索,本文将沿着文件的顺序讲述。在读代码的时候,边读边思考问题
4.2 博客
  1. 思考不出就依次搜索这些 博客
    csdn,博客园,简书,知乎,stackoverflow,野博客网站
4.3 书籍
  1. 如果找到相关的,先把博客链接贴上来,然后再读和思考
    书是翻字典类似的方法,可以寻找类似的章节,但是只是一种补充,不一定能全面。属于随缘获得新知识。

二.正文

1.找到我们的文件

这里是在vs2019环境下,以vector为例。
先随便找一个页面,打出如下代码:

#include
using namespace std;
vector<int> v;

然后鼠标放在定义的新vector上,右键,有两个比较重要的选项。

  1. 转到定义
  2. 速览定义
    转到定义,就可以找到vector的源文件了

2.开始分析吧!

2.1 关于引用

// vector standard header
#pragma once
#ifndef _VECTOR_
#define _VECTOR_
/*
此
处
代
码
一
会
儿
再
说
*/
#endif // _VECTOR_

这一层是最外面一层,是一般引用文件的定义,就是说,这种格式生来就是为了引用!

2.1.1

第一行的注释表示这是vector标准头文件,是的,你没有找错

2.1.2

第二行的#pragma once 是防止多次编译用的
(Q1.此处挖一个坑,我还没理清楚引用的层次问题,加了这句话也会显示重定义,相互引用之类的错误)

2.1.3
#ifndef _VECTOR_
#define _VECTOR_
#endif // _VECTOR_

这里的命名是使用的头文件全字母大写,空格(如果有)用下划线_代替相连。

这三行长得差不多,但如果你折叠代码,会发现其实
#ifndef 和 #endif 才是一对儿,#define 是被包裹在ifdefine里面的

这部分的意思和“编译一次”差不多,这里面的内容也是如果被定义过(编译过)就不要再重复定义了

(Q2.虽然差不多,但我不知道为啥要多此一举了,不知道有什么深层次的原因。)

2.2 宏定义

这一块是用来

#include 
#if _STL_COMPILER_PREPROCESSOR
#endif // _STL_COMPILER_PREPROCESSOR
#endif // _VECTOR_

(Q3.这个头文件干什么用的?)
这玩意儿从来没听说过,右键找不到文件,那就搜博客吧。
(Q4.右键找不到为啥不报错?怎么连下划线都没有?)

找到两个版本,但都是带yvals的,找不到yvals_core:
1.带注释的
2.微软的

(Q5.这个头文件干什么用的?和有啥关系?核心代码?)
猜测大概和宏定义有关,暂且不管。

然后发现自己好多都看不懂,

三.用到的参考资料,感谢他们的作者!

参考样例:

visual stdio 里的文件 vector.cpp

参考博客:

自制函数库
自己写的头文件为啥要加.h

参考用书:
  1. C++ Primer
  2. C++ Primer Plus

你可能感兴趣的:(笔记)