1 .
> A .cpp file is a compile unit
一个.cpp文件是一个编译单元,程序编译的时候只对这个.cpp文件进行的,他只看到这一个.cpp文件,看不到其他的东西
> only declarations are allowed to be in .h
· extern variables (extern 变量)
· function prototypes (函数原型)
· class/struct declaration (类或结构的声明)
> 头文件里只能放声明,不能放定义 ,如果放定义,当程序里有多个.cpp include 同一个.h文件时,就会出现duplicate symble _xx
· (由一个编译预处理指令.cpp变成*.ii文件)编译预处理已经过了,所以有 *.ii 文件
· (由一个汇编器把.cpp变成*.o文件)编译已经完成了,所以有 *.o 文件
· (由一个编译器把.cpp变成*.s文件)(*.s文件是 *.ii 文件与 *.o 文件 中间过程的文件)
> 再通过连接器 (ld),把多个 *.o 文件链接起来,再加上一些东西生成*.out
c++在编译多个文件的时候,只有一个编译单元,也就是编译的时候不知道有其他编译文件,只针对那一个.cpp文件做编译。
> 有声明,就要找一个地方定义,要不然在ld的时候就报错,找不到。
> 消灭warning ,因为warning里可能有隐藏的错误
2.
> # include ,当.cpp需要头文件里的东西就要# include ,如果一个.h文件需要另外一个.h文件里的内容,.h文件也要写# include
#include"**.h" :在当前引入该.h文件的目录寻找该.h文件,加入到当前文件中
#include<**.h>:当前不会在当前目录中找,要去系统目录中找。系统目录,即编译器所认定的头文件所在的目录,不同的编译器.h文件存放的位置有差别。
#include< ** > 和 #include<**.h>一样
3.
#ifndef TICKETMACHINE_H_
#define TICKETMACHINE_H_
...
#endif // !TICKETMACHINE_H_
条件编译:如果没有TICKETMACHINE_H_ 宏,定义一个TICKETMACHINE_H_ 宏,到endif为止。如果已经定义了一个TICKETMACHINE_H_ ,则中间的 ...不会被编译。
条件编译指令:
> 条件编译放头文件中起到同时引入两个该定义文件程序也可正常编译,否则报错redifinition重新定义。声明可以重复出现,定义不能出现两次



