文件架构:每个.c文件只包含对应的.h文件,每个.h文件只包含要用到的.h文件

ifndef只能解决重复包含的问题,比如a.h包含了c.h,b.h也包含了c.h,此时如果在d.h里同时包含a.h和b.h,那么如果没有ifndef就会报错。

如果a.h里包含了b.h,b.h里又包含了a.h,那么这样也会报错,且这个问题无法使用ifndef解决,且有时不会显式报错,发现的时候已经为时已晚,可谓代码杀手。
建议在规划文件时先把文件的架构以图的形式捋顺再动手。

extern置于变量前,标示变量的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

函数指针
函数指针 —存放函数地址的指针;
&函数名 —得到的就是一个函数的地址;
正如数组名=&数组名,函数名也是等于&函数名的
函数指针定义:函数的返回值类型(指针名)(函数的参数列表类型)=&函数名/=函数名
函数指针调用:(
函数指针)(函数的参数列表类型)=函数指针(函数的参数列表类型)=函数名(函数的参数列表类型)
例:
void Add(int x, int y){return x+y;}
int main(){
int (pf)(int,int)=&Add=Add;
int ret=(
pf)(3,5)=pf(3,5)=Add(3,5)=8;