预处理->编译->汇编->链接->.exe
预处理:
①将所有的“#define”删除,并且展开所有的宏定义
②处理所有的条件编译指令,如:“#if”、“#ifdef”、“#elif”、“#else”、“endif”等。
③处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。
(注意:这个过程可能是递归进行的,也就是说被包含的文件可能还包含其他文件)
也就是说,预处理,主要是根据各种#,决定如何进行展开。
涉及文件.h,如果遇到#include<xxxx.h> ,那么,就在这个位置将头文件的内容展开。
这就说明,为什么有些.h文件,要比其他文件先#include了,因为根据C++的德性,没先声明的话,后面的要用到它,那么会出错。
#include<xxxx.h>是直接展开的,如果其他文件也#include<xxxx.h>,那么就展开了好多次,那么就相当于声明了好多次,那么就会出错。
所以,在头文件中,要么写#pragma once,要么: